home *** CD-ROM | disk | FTP | other *** search
/ BBS Toolkit / BBS Toolkit.iso / rbbs_pc / 173abas.zip / CNFG-SUB.BAS < prev    next >
BASIC Source File  |  1990-08-26  |  103KB  |  2,315 lines

  1. ' $linesize:132
  2. ' $title: 'CNFG-SUB.BAS 17.3A, Copyright 1987-90 by D. Thomas Mack'  ' DA081003
  3. '  Copyright 1990 by D. Thomas Mack, all rights reserved.
  4. '  Name ...............: CNFG-SUB.BAS
  5. '  First Released .....: February 11, 1990
  6. '  Subsequent Releases.: August 26, 1990
  7. '  Copyright ..........: 1987-90
  8. '  Purpose.............: The Remote Bulletin Board System for the IBM PC,
  9. '                        RBBS-PC, configuration program -- CONFIG.BAS
  10. '                        utilizes a lot of menus and string space.
  11. '                        These are incorporated within CNFG-SUB.BAS as a
  12. '                        seperately callable subroutines in order to free
  13. '                        up as much code as possible within the 64K code
  14. '                        segment used by CONFIG.BAS.
  15. '  Parameters..........: Most parameters are passed via a COMMON statement.
  16. '
  17. ' Subroutine  Line      Function of Subroutine
  18. '    Name    Number
  19. ' ALLCAPS    61212+     Captialize a string
  20. ' ANSIDECODE 62040+     Convert ANSI strings into english text expressions
  21. ' ANYINTEGER 61450      Prompt for any integer
  22. ' ANYNUMBER  61400      Prompt for any number
  23. ' ASKRO      61100      Ask a question on a specific row
  24. ' ASKUPOS    61300      Ask for identifying field in USERS record
  25. ' BRKFNAME   61830      Break file name in drive/path, prefix, extension
  26. ' CHKFMSDIR  61700      Check FMS directory for valid structure
  27. ' CHKPERSDIR 61755      Check Personal directory format
  28. ' CNFGINIT   60385      Initialize CONFIG's constants
  29. ' COLORCODE  62040+     Convert response into ANSI-meaningful strings
  30. ' DISPLAY    12190      Display the CONFIG menu pages
  31. ' FINDFILE   61600      Determine whether a file exists
  32. ' FINDLAST   61850      Find last occurence of a character in a string
  33. ' GETANSI    62000      Prompt for ANSI colors to be used
  34. ' GETASCII   61810      Get any character by character or ascii value
  35. ' GETCOLOR   61950      Process request for setting color
  36. ' GETINIT    61110      Get answers that are integers
  37. ' GETNUMYN   61150      Get TRUE/FALSE answer to a YES/NO question
  38. ' GETYESNO   61200      Ask a question with a "yes" or "no" response
  39. ' HANDERR    61775+     Handle error checking for FMS directories
  40. ' MMINTEGER  61500      Prompt for integer with min and a max
  41. ' NETTYPE    60382      Prompt for supported network types
  42. ' REMOVE     61800      Remove characters from a string
  43. ' SECURE     61860      Allow commands and their security level to be changed
  44. ' SELMODEM   62100      Select modem to set modem strings
  45. ' TRIMTRAIL  61840      Remove trailing characters from a string
  46. '
  47. '  $INCLUDE: 'CNFG-VAR.BAS'
  48. '
  49. '  $SUBTITLE: 'DISPLAY - subroutine to display CONFIG's menus'
  50. '  $PAGE
  51. '
  52. '  SUBROUTINE NAME    --  DISPLAY
  53. '
  54. '  INPUT PARAMETERS   --  PARAMETER        DESCRIPTION
  55. '                         IX = 0           DISPLAY THE CHOICE OF MENUS
  56. '                         IX = -1          RE-READ THE INPUT (INVALID REQUEST)
  57. '                         IX > 0           DISPLAY THE APPROPRIATE PAGE
  58. '
  59. '  OUTPUT PARAMETERS  --  HJ$              OPTION SELECTED
  60. '                         IPAGE            MENU PAGE CONTAINING OPTION
  61. '                         ILOOKUP          INDEX (1 TO 20) OF OPTION SELECTED
  62. '
  63. '  SUBROUTINE PURPOSE --  TO DISPLAY CONFIG'S MENUS AND REQUEST OPTION
  64. '
  65.       SUB DISPLAY STATIC
  66. '
  67. ' *  DISPLAY CONFIG'S MAIN FUNCTION KEY MENU
  68. '
  69.       IF IX > 0 THEN _
  70.          GOTO 12320
  71.       IF IX = -1 THEN _
  72.          GOTO 12590
  73. 12190 COLOR FG,BG,BORDER
  74.       CLS
  75.       DISPLAYED.PAGE.NUMBER = 0
  76.       I! = FRE(C$)
  77.       COLOR 0,7,0
  78.       LOCATE 4,10
  79.       PRINT "RBBS-PC "+ CONFIG.VERSION$ + " CONFIGURATION PROGRAM "
  80.       COLOR FG,BG,BORDER
  81.       LOCATE 1,1,0
  82.       PRINT "Copyright (c) 1983-1990 Tom Mack"
  83.       LOCATE 2,1,0
  84.       PRINT "39 Cranbury Dr, Trumbull, CT. 06611";
  85.       IF CONFERENCE.MODE THEN _
  86.          GOSUB 24970
  87.       LOCATE  5,1
  88.       PRINT "   F1            Global RBBS-PC Parameters (part 1)
  89.       PRINT "   F2            Global RBBS-PC Parameters (part 2)
  90.       PRINT "   F3            Global RBBS-PC Parameters (part 3)
  91.       PRINT "   F4            RBBS-PC System Files (part 1)
  92.       PRINT "   F5            RBBS-PC System Files (part 2)
  93.       PRINT "   F6            Parameters for RBBS-PC's 'Doors'
  94.       PRINT "   F7            Parameters for RBBS-PC's Security (part 1)
  95.       PRINT "   F8            Parameters for RBBS-PC's Security (part 2)
  96.       PRINT "   F9            Parameters for multiple RBBS-PC's
  97.       PRINT "  F10            RBBS-PC utilities
  98.       PRINT "  Shift-F1       RBBS-PC File Management Faciliites"
  99.       PRINT "  Shift-F2       RBBS-PC Communications Parameters (part 1)
  100.       PRINT "  Shift-F3       RBBS-PC Communications Parameters (part 2)
  101.       PRINT "  Shift-F4       Parameters for RBBS-PC NET-MAIL
  102.       PRINT "  Shift-F5       New users parameters"
  103.       PRINT "  Shift-F6       Library Sub-System"
  104.       PRINT "  Shift-F7       RBBS-PC Color parameters"
  105.       PRINT "  Shift-F8       Reserved for future use"
  106.       XX$ = "Press END to terminate or Function Key to select page "
  107.       GOSUB 50345
  108.       LOCATE ,,1
  109. 12310 GOSUB 22160
  110. 12320 IF IX THEN _            'IX    Key    Where to branch to
  111.          ON IX GOTO 12360, _  ' 1       F1 - Global Parameters (Part 1)
  112.                     12370, _  ' 2       F2 - Global Parameters (Part 2)
  113.                     12380, _  ' 3       F3 - Global Parameters (Part 3)
  114.                     12390, _  ' 4       F4 - RBBS-PC System Files (Part 1)
  115.                     12400, _  ' 5       F5 - RBBS-PC System Files (Part 2)
  116.                     12410, _  ' 6       F6 - RBBS-PC "doors"
  117.                     12420, _  ' 7       F7 - RBBS-PC security parms. (Part 1)
  118.                     12466, _  ' 8       F8 - RBBS-PC security parms. (Part 2)
  119.                     12470, _  ' 9       F9 - Multiple RBBS-PC parameters
  120.                     12480, _  '10      F10 - RBBS-PC's utilities
  121.                     12490, _  '11 Shift-F1 - RBBS-PC File Manager
  122.                     12500, _  '12 Shift-F2 - RBBS-PC comm. parameters (Part 1)
  123.                     12505, _  '13 Shift-F3 - RBBS-PC comm. parameters (Part 2)
  124.                     12510, _  '14 Shift-F4 - RBBS-PC Net Mail
  125.                     12520, _  '15 Shift-F5 - New user parameters
  126.                     12530, _  '16 Shift-F6 - Library parameters
  127.                     12540, _  '17 Shift-F7 - RBBS-PC Color parameters
  128.                     12310, _  '18 Shift-F8 - Reserved for future use
  129.                     12340, _  '19     PgUp - Go to previous page
  130.                     12330, _  '20     PgDn - Go to next page
  131.                     12630, _  '21      End - Terminate CONFIG
  132.                     12350     '22    Enter - Re-display current page
  133.       GOTO 12310
  134. '
  135. ' *  COMMON ROUTINE TO HANDLE UNDEFINED OPTIONS
  136. '
  137. 12325 IX = IPAGE
  138.       GOTO 12320
  139. '
  140. ' *  COMMON ROUTINE TO HANDLE PAGE UP OF DISPLAYS
  141. '
  142. 12330 IF (DISPLAYED.PAGE.NUMBER + 1 ) > 17 THEN _
  143.          GOTO 12190
  144.       IX = DISPLAYED.PAGE.NUMBER + 1
  145.       GOTO 12320
  146. '
  147. ' *  COMMON ROUTINE TO HANDLE PAGE DOWN OF DISPLAYS
  148. '
  149. 12340 IF (DISPLAYED.PAGE.NUMBER - 1) < 1 THEN _
  150.          GOTO 12190
  151.       IX = DISPLAYED.PAGE.NUMBER - 1
  152.       GOTO 12320
  153. '
  154. ' *  RETURN TO PRIMARY MENU SELECTION DISPLAY
  155. '
  156. 12350 GOSUB 60380
  157.       GOTO 12310
  158. '
  159. ' *  COMMON CONFIGURATION PROGRAM MENU AND PAGE DISPLAY
  160. '
  161. 12360 DISPLAYED.PAGE.NUMBER = 1
  162.       GOSUB 24800
  163.       LOCATE  3,1
  164.       PRINT " 1. SYSOP's Public First Name -------------------- " + SYSOP.FIRST.NAME$
  165.       PRINT " 2. SYSOP's Public Last Name --------------------- " + SYSOP.LAST.NAME$
  166.       PRINT " 3. SYSOP's default expert mode at signon -------- " + EXPERT.USER$
  167.       PRINT " 4. SYSOP's office hours -------------------------"STR$(START.OFFICE.HOURS);" to"STR$(END.OFFICE.HOURS)
  168.       PRINT " 5. Page SYSOP using printer's bell -------------- " + M11$
  169.       PRINT " 6. Go off-line whenever a DISK FULL occurs ------ " ; FNYESNO$(DISKFULL.GO.OFFLINE)
  170.       PRINT " 7. Prompt bell default is ----------------------- " + PROMPT.BELL$
  171.       PRINT " 8. Maximum time per session (in minutes) --------"STR$(MINUTES.PER.SESSION!)
  172.       PRINT " 9. Maximum minutes per day ----------------------";STR$(MAX.PER.DAY)
  173.       PRINT "10. Factor to extend session time for uploads ----" + STR$(UPLOAD.TIME.FACTOR!)
  174.       PRINT "11. # Months of inactivity before user deleted ---"STR$(ACT.MNTHS.B4.DELETING)
  175.       PRINT "12. Name of RBBS-PC shown initially is ----------- " + RBBS.NAME$
  176.       PRINT "13. Foreground color (for color monitors) is -----"STR$(FG)
  177.       PRINT "14. Background color (for color monitors) is -----"STR$(BG)
  178.       PRINT "15. The border color (for color monitors) is -----"STR$(BORDER)
  179.       PRINT "16. Your CONFIG.SYS contains 'DEVICE=ANSI.SYS'---- " + FNYESNO$(DOSANSI)
  180.       IF SMART.TEXT THEN _
  181.          SMART.TEXT$ = STR$(SMART.TEXT) _
  182.       ELSE SMART.TEXT$ = NONE.PICKED$                                ' KG080301
  183.       PRINT "17. Control character for SMART TEXT -------------" + SMART.TEXT$
  184.       PRINT "18. File with automatic operator page parameters - " ; AUTOPAGE.DEF$
  185.       X = INSTR("ANS",LOGON.MAIL.LEVEL$)
  186.       IF X < 1 THEN _
  187.          X = 1
  188.       X$ = MID$("OLD & NEWNEW ONLY NONE",9*X-8,9)
  189.       IF X$ = "NONE" THEN _
  190.          X$ = NONE.PICKED$
  191.       PRINT "19. Personal mail notification level at logon is - " + X$
  192.       GOTO 12580
  193. 12370 DISPLAYED.PAGE.NUMBER = 2
  194.       GOSUB 24800
  195.       LOCATE  3,1
  196.       PRINT "21. Remind users of messages that they left ------ " + FNYESNO$(MESSAGE.REMINDER)
  197.       PRINT "22. Remind users of # uploads and downloads? ----- " + FNYESNO$(REMIND.FILE.TRANSFERS)
  198.       PRINT "23. Remind users of their terminal profile? ------ " + FNYESNO$(REMIND.PROFILE)
  199.       PRINT "24. Enable download of new files at logon -------- " + FNYESNO$(NEW.FILES.CHECK)
  200.       PRINT "25. Default user page length is ------------------" + STR$(PAGE.LENGTH)
  201.       PRINT "26. Maximum number of lines allowed per message --" + STR$(MAX.MESSAGE.LINES)
  202.       PRINT "27. Is system 'welcome' interruptable? ----------- " + FNYESNO$(WELCOME.INTERRUPTABLE)
  203.       PRINT "28. Are system bulletins to be 'optional'? ------- " + FNYESNO$(BULLETINS.OPTIONAL)
  204.       PRINT "29. Type of PC RBBS-PC will be running on? ------- " + COMPUTER.TYPE$
  205.       PRINT "30. Symbols to use for SYSOP commands ------------ " + SYSOP.COMMANDS$
  206.       PRINT "31. Symbols to use for MAIN menu commands -------- " + MAIN.COMMANDS$
  207.       PRINT "32. Symbols to use for FILE menu commands -------- " + FILE.COMMANDS$
  208.       PRINT "33. Symbols to use for UTILITIES menu commands --- " + UTIL.COMMANDS$
  209.       PRINT "34. Symbols to use for global commands ----------- " + GLOBAL.COMMANDS$
  210.       PRINT "35. Show section in command prompt --------------- " + FNYESNO$(SHOW.SECTION)
  211.       PRINT "36. Show commands in command prompt -------------- " + FNYESNO$(COMMANDS.IN.PROMPT)
  212.       PRINT "37. Restrict valid commands to current section --- " + FNYESNO$(RESTRICT.VALID.CMDS)
  213.       PRINT "38. Use machine language routines for speed ------ " + FNYESNO$(TURBO.RBBS)
  214.       PRINT "39. Use BASIC PRINT for screen writes ------------ " + FNYESNO$(USE.BASIC.WRITES)
  215.       PRINT "40. # of lines for extended file descriptions ----" + STR$(MAX.EXTENDED.LINES)
  216.       GOTO 12580
  217. 12380 DISPLAYED.PAGE.NUMBER = 3
  218.       GOSUB 24800
  219.       LOCATE  3,1
  220.       PRINT "41. Field used to identify users ----------------- " + HASH.ID$
  221.       PRINT "42. Field used to distinguish users with same ID-- " + INDIV.ID$
  222.       PRINT "43. Start position identifying personal downloads-"  + STR$(PERSONAL.BEGIN)
  223.       PRINT "44. Field length to identify personal downloads --"  + STR$(PERSONAL.LEN)
  224.       PRINT "45. Prompt for first part of personal identifier - " + FIRST.NAME.PROMPT$
  225.       PRINT "46. Prompt for last part of personal identifier -- " + LAST.NAME.PROMPT$
  226.       PRINT "47. Enforce upload/download ratios --------------- " + FNYESNO$(ENFORCE.UPLOAD.DOWNLOAD.RATIOS)
  227.       PRINT "48. RESTRICT users by SUBSCRIPTION date ---------- " + FNYESNO$(RESTRICT.BY.DATE)
  228.       PRINT "49. Security level when SUBSCRIPTION expires -----"  + STR$(EXPIRED.SECURITY)
  229.       PRINT "50. Days before expiration to warn callers -------"  + STR$(DAYS.TO.WARN)
  230.       PRINT "51. Default # days in SUBSCRIPTION PERIOD --------"  + STR$(DAYS.IN.SUBSCRIPTION.PERIOD)
  231.       PRINT "52. Turn printer off after each recycle ---------- " + FNYESNO$(TURN.PRINTER.OFF)
  232.       PRINT "53. Play musical themes for RBBS-PC functions----- " + FNYESNO$(MUSIC)
  233.       PRINT "54. BUFFER SIZE used when displaying text files --" + STR$(BUFFER.SIZE)
  234.       PRINT "55. Stack space to be made available -------------" + STR$(SIZE.OF.STACK)
  235.       PRINT "56. File shown users when SYSOP wants system next  " + NOT.YET.IN$ ' F7.MESSAGE$
  236.       PRINT "57. Ask users their (What is your ...) ----------- " + USER.LOCATION$
  237.       PRINT "58. Show ALL DIRECTORIES in order in dir of dir -- " + FNYESNO$(USE.DIR.ORDER)
  238.       PRINT "59. BUFFER SIZE for writes on internal protocols -" + STR$(WRITE.BUF.DEF)
  239.       PRINT "60. Voice Synthesizer support -------------------- " + VOICE.TYPE$
  240.       GOTO 12580
  241. 12390 DISPLAYED.PAGE.NUMBER = 4
  242.       GOSUB 24800
  243.       IF INSTR(DRIVE.FOR.BULLETINS$,":") < 1 THEN _
  244.          DRIVE.FOR.BULLETINS$ = DRIVE.FOR.BULLETINS$ + ":"
  245.       LOCATE  3,1
  246.       PRINT "61. Drive and file describing 'bulletins' is ----- " + DRIVE.FOR.BULLETINS$ + BULLETIN.MENU$
  247.       PRINT "62. Number of active 'bulletins' -----------------" + STR$(ACTIVE.BULLETINS)
  248.       PRINT "63. Prefix used to name bulletin files is -------- " + BULLETIN.PREFIX$
  249.       PRINT "64. Drive and path (optional) for 'help' files --- " + HELP.PATH$
  250.       PRINT "65. Prefix used to name three major 'help' files - " + HELP.FILE.PREFIX$
  251.       PRINT "66. Extension for help files of individual cmds -- " + HELP.EXTENSION$
  252.       PRINT "67. HELP file when callers CATEGORIZE uploads ---- " + UPCAT.HELP$
  253.       PRINT "68. Name of 'newuser' file shown to new users ---- " + NEWUSER.FILE$
  254.       PRINT "69. Name of 'welcome' file shown at logon -------- " + WELCOME.FILE$
  255.       PRINT "70. The SYSOP's command menu is named ------------ " + MENU$(1)
  256.       PRINT "71. The MAIN system menu is named ---------------- " + MENU$(2)
  257.       PRINT "72. The file subsystem menu is named ------------- " + MENU$(3)
  258.       PRINT "73. The utilities subsystem menu is named -------- " + MENU$(4)
  259.       PRINT "74. Menu that lists available conferences is ----- " + CONFERENCE.MENU$
  260.       PRINT "75. Menu that lists questionnaires available is -- " + ANS.MENU$
  261.       PRINT "76. Drive/path for optional questionnaires ------- " + QUES.PATH$
  262.       PRINT "77. File with main SYSOP-supplied user interface - " + MAIN.PUI$
  263.       PRINT "78. Allow menus to pause in the middle ----------- " + FNYESNO$(MENUS.CAN.PAUSE)
  264.       PRINT "79. Drive/path where macro files are stored ------ " + MACRO.DRVPATH$
  265.       IF MACRO.EXTENSION$ = "" THEN _
  266.          X$ = NONE.PICKED$ _
  267.       ELSE X$ = MACRO.EXTENSION$
  268.       PRINT "80. Extension of macro files --------------------- " ; X$
  269.       GOTO 12580
  270. 12400 DISPLAYED.PAGE.NUMBER = 5
  271.       GOSUB 24800
  272.       LOCATE  3,1
  273.       PRINT " 81. File containing invalid user names ----------- " + TRASHCAN.FILE$
  274.       PRINT " 82. Name questionnaire required of ALL callers --- " + REQUIRED.QUESTIONNAIRE$
  275.       PRINT " 83. Name of 'pre-log' file ----------------------- " + PRELOG$
  276.       PRINT " 84. Name of questionnaire required of new users -- " + NEW.USER.QUESTIONNAIRE$
  277.       PRINT " 85. Name of 'epi-log' questionnaire -------------- " + EPILOG$
  278.       PRINT " 86. System file containing messages is named ----- " + MAIN.MESSAGE.FILE$
  279.       PRINT " 87. System file for recording users is named ----- " + MAIN.USER.FILE$
  280.       PRINT " 88. System file for comments to SYSOP is named --- " + COMMENTS.FILE$
  281.       PRINT " 89. Record comments as private messages ---------- " ; FNYESNO$(COMMENTS.AS.MESSAGES)
  282.       PRINT " 90. System file for 'callers' is named ----------- " + CALLERS.FILE$
  283.       PRINT " 91. Extended logging to 'callers' file ----------- " ; FNYESNO$(EXTENDED.LOGGING)
  284.       PRINT " 92. Wrap-around the 'callers' file --------------- " + NOT.YET.IN$ ' WRAP.CALLERS.FILE$
  285.       PRINT " 93. File controlling scan for mail waiting ------- " + CONFMAIL.LIST$
  286.       PRINT " 94. Max # of work variables in ques/macros -------"  ; STR$(MAX.WORK.VAR)
  287.       GOTO 12580
  288. 12410 DISPLAYED.PAGE.NUMBER = 6
  289.       GOSUB 24800
  290.       LOCATE  3,1
  291.       PRINT "101. Is the 'door' subystem available? ------------ " ; FNYESNO$(DOORS.AVAILABLE)
  292.       PRINT "102. The 'door' subsystem menu is named ----------- " + MENU$(5)
  293.       PRINT "103. File built dynamically to open a 'door' ------ " + RCTTY.BAT$
  294.       PRINT "104. When a 'door' closes, re-invoke RBBS-PC via -- " + RBBS.BAT$
  295.       PRINT "105. Drive/path to look for COMMAND.COM on -------- " + DISK.FOR.DOS$
  296.       PRINT "106. Use the Dos 'CTTY' command to redirect I/O --- " ; FNYESNO$(REDIRECT.IO.METHOD)
  297.       PRINT "107. Door Program to check users at logon --------- " ; REGISTRATION.PROGRAM$
  298.       PRINT "108. Logon door required of new users & security <="  ; STR$(MAX.REG.SEC)
  299.       PRINT "109. Name of control file for doors --------------- " ; DOORS.DEF$
  300.       GOTO 12580
  301. 12420 DISPLAYED.PAGE.NUMBER = 7
  302.       GOSUB 24800
  303.       LOCATE  3,1
  304.       PRINT "121. Pseudonym to sign on remotely as the SYSOP ---- " + MN1$+ " " +MN2$
  305.       PRINT "122. ESC key logs SYSOP on locally without password- " + FNYESNO$(ESCAPE.INSECURE)
  306.       PRINT "123. Minimum security level to log on RBBS-PC ------" + STR$(MINIMUM.LOGON.SECURITY)
  307.       PRINT "124. Default security level for new callers --------" + STR$(DEFAULT.SECURITY.LEVEL)
  308.       PRINT "125. Security level for SYSOP ----------------------" + STR$(SYSOP.SECURITY.LEVEL)
  309.       PRINT "126. Minimum security level to see SYSOP's menu ----" + STR$(SYSOP.MENU.SECURITY.LEVEL)
  310.       PRINT "127. Minimum security to leave extended description-" + STR$(ASK.EXTENDED.DESC)
  311.       PRINT "128. Max # security violations before disconnect ---" + STR$(MAXIMUM.VIOLATIONS)
  312.       M22$ = STR$(SYSOP.FUNCTION(1))
  313.       IX = SYSOP.FUNCTION(1)
  314.       FOR I = 2 TO NUM.SYSOP
  315.         IF IX <> SYSOP.FUNCTION(I) THEN _
  316.            M22$ = "(Variable)" : _
  317.            GOTO 12430
  318.       NEXT
  319. 12430 PRINT "129. Security level for SYSOP functions ------------" + M22$
  320.       M23$ = STR$(MAIN.FUNCTION(1))
  321.       IX = MAIN.FUNCTION(1)
  322.       FOR I = 2 TO NUM.MAIN
  323.         IF IX<>MAIN.FUNCTION(I) THEN _
  324.            M23$ = "(Variable)" : _
  325.            GOTO 12440
  326.       NEXT
  327. 12440 PRINT "130. Security level for main menu functions --------" + M23$
  328.       M24$ = STR$(FILES.FUNCTION(1))
  329.       IX = FILES.FUNCTION(1)
  330.       FOR I = 2 TO NUM.FILES
  331.         IF IX<>FILES.FUNCTION(I) THEN _
  332.            M24$ = "(Variable)" : _
  333.            GOTO 12450
  334.       NEXT
  335. 12450 PRINT "131. Security level for file menu functions --------" + M24$
  336.       M25$ = STR$(UTILITY.FUNCTION(1))
  337.       IX = UTILITY.FUNCTION(1)
  338.       FOR I = 2 TO NUM.UTILITY
  339.         IF IX<>UTILITY.FUNCTION(I) THEN _
  340.            M25$ = "(Variable)" : _
  341.            GOTO 12460
  342.       NEXT
  343. 12460 PRINT "132. Security level for utilities menu functions ---" + M25$
  344.       M26$ = STR$(GLOBAL.FUNCTION(1))
  345.       IX = GLOBAL.FUNCTION(1)
  346.       FOR I = 1 TO NUM.GLOBAL
  347.         IF IX<>GLOBAL.FUNCTION(I) THEN _
  348.            M26$ = "(Variable)" : _
  349.            GOTO 12465
  350.       NEXT
  351. 12465 PRINT "133. Security level for GLOBAL commands ------------" + M26$
  352.       PRINT "134. Max # of password changes in a session --------" + STR$(MAXIMUM.PASSWORD.CHANGES)
  353.       PRINT "135. Minimum security for temp. password changes ---" + STR$(MINIMUM.SECURITY.FOR.TEMP.PASSWORD)
  354.       PRINT "136. Minimum security to overwrite on uploads ------" + STR$(OVERWRITE.SECURITY.LEVEL)
  355.       PRINT "137. User's security exempted from 'packing' -------" + STR$(SEC.LVL.EXEMPT.FRM.PURGING)
  356.       PRINT "138. Default security to read new PRIVATE messages -"  + STR$(PRIVATE.READ.SEC)
  357.       PRINT "139. Default security to read new PUBLIC messages --"  + STR$(PUBLIC.READ.SEC)
  358.       PRINT "140. Minimum security to change msg.'s security ----"  + STR$(SEC.CHANGE.MSG)
  359.       GOTO 12580
  360. 12466 DISPLAYED.PAGE.NUMBER = 8
  361.       GOSUB 24800
  362.       LOCATE  3,1
  363.       PRINT "141. Call-back verification ----------------------- " + NOT.YET.IN$ ' CALLBACK.VERIFICATION$
  364.       PRINT "142. Drive/path where personal files & dir stored - " + PERSONAL.DRVPATH$
  365.       PRINT "143. Name of Personal Directory ------------------- " + PERSONAL.DIR$
  366.       PRINT "144. Protocol required for personal downloads ----- " + MID$("<other><none> Ascii  XMODEM Xm/CRC Kermit Ymodem Imodem YmodemGWxmodem", 7 * INSTR("NAXCKYIGW",PERSONAL.PROTOCOL$) + 1,7)  ' EC060601
  367.       PRINT "145. Files with download security are listed in --- " + FILESEC.FILE$
  368.       PRINT "146. File name with privileged group passwords is - " + PASSWORD.FILE$
  369.       PRINT "147. Concatenate multi-file ASCII downloads ------- " + FNYESNO$(PERSONAL.CONCAT)
  370.       PRINT "148. Min SECURITY to CATEGORIZE uploads -----------" + STR$(SL.CATEGORIZE.UPLOADS)
  371.       PRINT "149. Min security level to view new uploads -------" + STR$(MIN.SEC.TO.VIEW)
  372.       PRINT "150. Security level exempt from 'epi-log' file ----" + STR$(SECURITY.EXEMPT.FROM.EPILOG)
  373.       PRINT "151. Min. security to 'AUTO ADD' conference user -- " + AUTO.ADD.SECURITY$ ' KG062301
  374.       PRINT "152. Min. security for old caller to turbo logon --" + STR$(ALLOW.CALLER.TURBO)
  375.       PRINT "153. Min. security to describe an existing file ---" + STR$(ADD.DIR.SECURITY)
  376.       PRINT "154. Help file to display for a security violation- " + SECVIO.HLP$
  377.       TIME.LOCK$ = MID$("<none> DOORS  DOWNLDSBOTH   ",TIME.LOCK*7+1,7)
  378.       PRINT "155. Time lock on DOORS and DOWNLOADS ------------- "; TIME.LOCK$
  379.       PRINT "156. Min. sec level exempt from auto-update of sec-" ; AUTO.UPGRADE.SEC
  380.       PRINT "157. Min security to READ & KILL all messages -----" ; SEC.KILL.ANY
  381.       PRINT "158. Do not display lines in msgs beginning with -- "; SCREEN.OUT.MSG$ ' KG041101
  382.       GOTO 12580
  383. 12470 DISPLAYED.PAGE.NUMBER = 9
  384.       GOSUB 30040
  385.       ' MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD
  386.       MAX.MSG.FILE.SIZE.FRM.DEF! = HIGHEST.MESSAGE.RECORD
  387.       MAX.ALLOWED.MSGS.FRM.DEF  = MAXIMUM.NUMBER.OF.MSGS
  388.       GOSUB 24800
  389.       LOCATE  3,1
  390.       PRINT "161. Maximum number of concurrent RBBS-PC's  -------" + STR$(MAXIMUM.NUMBER.OF.NODES)
  391.       MT$ = "single RBBS-PC copy "
  392.       IF MAXIMUM.NUMBER.OF.NODES <> 1 THEN _
  393.          MT$ = "concurrent RBBS-PC's" : _
  394.          SUBROUTINE.PARAMETER = 2 : _
  395.          IF NETWORK.TYPE < 0 OR NETWORK.TYPE > 7 THEN _
  396.             SUBROUTINE.PARAMETER = 1 : _
  397.             CALL NETTYPE : _
  398.          ELSE CALL NETTYPE
  399.       IF NETWORK.TYPE = 6 THEN _
  400.          MT$ = "NETBIOS             "
  401.       IF NETWORK.TYPE = 7 THEN _
  402.          MT$ = "DoubleDOS           "
  403.       PRINT "162. Environment running " + MT$ + " ------ " + NETWORK.TYPE$
  404.       PRINT "163. RBBS-PC 'recycle' method when users log off --- " + RECYCLE.TO.DOS$
  405.       FILE$ = MAIN.MESSAGE.FILE$
  406.       GOSUB 30180
  407.       MAX.MSG.FILE.SIZE.FRM.DEF! = UG
  408.       IF CONFERENCE.MODE <> 1 THEN _                                 ' KG062302
  409.          X$ = "MAIN" _                                               ' KG062302
  410.       ELSE X$ = ZConfName$                                           ' KG062302
  411.       PRINT "164. Number of records in " ;X$;" User File ";STRING$(15-LEN(X$),"-");STR$(MAX.USR.FILE.SIZE.FRM.DEF) ' KG062302
  412.       IF MAIN.MESSAGE.FILE$ = MAINMSG$ THEN _                        ' KG062302
  413.          X$ = "MAIN" _                                               ' KG062302
  414.       ELSE X$ = ZConfName$                                           ' KG062302
  415.       PRINT "165. Number of records in " ;X$;" Message File ";STRING$(12-LEN(X$),"-");STR$(MAX.MSG.FILE.SIZE.FRM.DEF!) ' KG062302
  416.       PRINT "166. Maximum number of messages allowed ------------" ; STR$(MAX.ALLOWED.MSGS.FRM.DEF) ' KG062302
  417.       PRINT "167. Conference File Maintenance."
  418.       IF DEFAULT.EXTENSION$ = "" THEN _                              ' KG080101
  419.          X$ = NONE.PICKED$ _                                         ' KG080301
  420.       ELSE X$ = DEFAULT.EXTENSION$                                   ' KG080101
  421.       PRINT "168. Default extension for compressed files -------- " ; X$ ' KG080101
  422.       PRINT "169. Additional extensions for compressed files ---- " ; COMPRESSED.EXT$
  423.       PRINT "170. Message file GROWS in size as messages added -- " ; FNYESNO$(MESSAGES.CAN.GROW)
  424.       GOTO 12580
  425. 12480 DISPLAYED.PAGE.NUMBER = 10
  426.       GOSUB 24800
  427.       RB = 0
  428.       LOCATE  3,1
  429.       PRINT "181. Pack " + MAIN.MESSAGE.FILE$ + " file.
  430.       PRINT "182. Rebuild " + MAIN.USER.FILE$ + " file.
  431.       PRINT "183. Print " + MAIN.MESSAGE.FILE$ + " 'header' records.
  432.       PRINT "184. Renumber messages in " + MAIN.MESSAGE.FILE$ + " file.
  433.       PRINT "185. Repair messages in " + MAIN.MESSAGE.FILE$ + " file.
  434.       PRINT "186. Make all users answer required questionnaire."
  435.       PRINT "187. Check FMS directory structure."
  436.       PRINT "188. Check Personal Download directory structure."
  437.       PRINT "189. Set most critical parameters."
  438.       PRINT "190. Set parameters new to RBBS-PC " + CONFIG.VERSION$
  439.       PRINT "191. Reset active printers for all nodes."
  440.       PRINT "192. Make user pref. on hilighting match color graphics."
  441.       GOTO 12580
  442. 12490 DISPLAYED.PAGE.NUMBER = 11
  443.       GOSUB 24800
  444.       LOCATE  3,1
  445.       PRINT "201. Drive available for uploading files to ------- " + DRIVE.FOR.UPLOADS$ + ":"
  446.       PRINT "202. File name of Upload Directory  --------------- " + UPLOAD.DIRECTORY$
  447.       PRINT "203. Drive/path where Upload Directory stored ----- " + UPLOAD.PATH$
  448.       PRINT "204. Drive(s) available for Downloading ----------- " + DRIVES.FOR.DOWNLOADS$
  449.       PRINT "205. Will you be using DOS sub-directories? ------- " ; FNYESNO$(WILL.SUBDIRS.B.USED)
  450.       PRINT "206. Write Uploads to a DOS sub-directory? -------- " + FNYESNO$(UPLOAD.TO.SUBDIR)
  451.       PRINT "207. Are downloads from DOS sub-directories? ------ " + FNYESNO$(DOWNLOAD.TO.SUBDIR)
  452.       PRINT "208. List, change, add, delete sub-directories."
  453.       PRINT "209. Extension for file directories --------------- " + DIRECTORY.EXTENTION$
  454.       X$ = ALTDIR.EXTENSION$
  455.       IF ALTDIR.EXTENSION$ = "" OR _
  456.          ALTDIR.EXTENSION$ = "<none>" THEN _
  457.          X$ = NONE.PICKED$
  458.       PRINT "210. Alternate extension for directory files ------ " + X$
  459.       PRINT "211. Name (prefix) of directory of directories ---- " + DIRECTORY.PREFIX$
  460.       PRINT "212. Omit directory of directories in N)ew cmnd. -- " + OMIT.MAIN.DIRECTORY$
  461.       X$ = ALWAYS.STREW.TO$
  462.       IF ALWAYS.STREW.TO$ = "" OR _
  463.          ALWAYS.STREW.TO$ = "<none>" THEN _
  464.          X$ = "NO"
  465.       PRINT "213. Copy all upload descriptions to -------------- " + X$
  466.       A$ = FMS.DIRECTORY$
  467.       IF FMS.DIRECTORY$ = "" THEN _
  468.          A$ = NONE.PICKED$
  469.       PRINT "214. Name of master File Management System dir is - " + A$
  470.       PRINT "215. Limit file searches to master FMS dir only --- " ; FNYESNO$(LIMIT.SEARCH.TO.FMS)
  471.       PRINT "216. Default category code for uploads ------------ " + DEFAULT.CATEGORY.CODE$
  472.       PRINT "217. File containing valid directory categories --- " + DIR.CATEGORY.FILE$
  473.       X$ = MASTER.DIRECTORY.NAME$
  474.       IF MASTER.DIRECTORY.NAME$ = "" THEN _
  475.          X$ = "NO"
  476.       PRINT "218. Limit search for 'ALL' dirs to directory ----- " + X$
  477.       PRINT "219. Max length of description of uploaded file ---" + STR$(MAX.DESC.LEN)
  478.       PRINT "220. Drive/path(optional) for directory files ----- " + DIRECTORY.PATH$
  479.       GOTO 12580
  480. 12500 DISPLAYED.PAGE.NUMBER = 12
  481.       GOSUB 24800
  482.       LOCATE 3,1
  483.       PRINT "221. Communications port to be used by RBBS-PC ---- " + COM.PORT$
  484.       PRINT "222. # of seconds to wait for modem to initialize -" + STR$(MODEM.INIT.WAIT.TIME)
  485.       PRINT "223. Seconds to wait before issuing modem commands-" + STR$(MODEM.COMMAND.DELAY.TIME)
  486.       PRINT "224. Number of rings to wait before answering -----" + STR$(REQUIRED.RINGS);
  487.       IF INSTR(USER.INIT.COMMAND$, "S0=255") > 0 THEN _              ' DA080503
  488.          PRINT " RING BACK";
  489.       PRINT
  490.       PRINT "225. Set the modem commands"
  491.       PRINT "226. ---------------------------------------------- "
  492.       PRINT "227. Issue modem commands between rings ----------- " ; FNYESNO$(COMMANDS.BETWEEN.RINGS)
  493.       PRINT "228. Baud rate to initially open modem at --------- " + MODEM.INIT.BAUD$
  494.       X$ = STR$(WAIT.BEFORE.DISCONNECT) + " seconds"
  495.       IF WAIT.BEFORE.DISCONNECT = 0 THEN _
  496.          X$ = "NO"
  497.       PRINT "229. Log off user who are idle for ----------------" + X$
  498.       PRINT "230. Are you using a 'DUMB' auto-answer modem? ---- " ; FNYESNO$(DUMB.MODEM)
  499.       PRINT "231. Initialize modem firmware for RBBS-PC."
  500.       PRINT "232. # seconds to wait after dropping DTR ---------"  + STR$(DTR.DROP.DELAY)
  501.       PRINT "233. File with PROTOCOL definitions --------------- " + PROTO.DEF$
  502.       PRINT "234. Always check caller for AUTODOWNLOAD support - " ; FNYESNO$(ASK.IDENTITY)
  503.       PRINT "235. Require non-ascii protocol for BASIC files --- " ; FNYESNO$(REQUIRE.NON.ASCII)
  504.       X$ = STR$(RECYCLE.WAIT) + " minutes"
  505.       IF RECYCLE.WAIT = 0 THEN _
  506.          X$ = "<Don't recycle>"
  507.       PRINT "236. Recycle if no calls are received within ------" + X$
  508.       PRINT "237. Leave modem at initial baud ------------------ " + FNYESNO$(KEEP.INIT.BAUD)
  509.       GOTO 12580
  510. 12505 DISPLAYED.PAGE.NUMBER = 13
  511.       GOSUB 24800
  512.       LOCATE 3,1
  513.       PRINT "241. Restore initial parms. after change to N/8/1 - " + FNYESNO$(SWITCH.BACK)
  514.       PRINT "242. Minimum baud required of new callers ---------"  + STR$(MIN.NEWCALLER.BAUD)
  515.       PRINT "243. Minimum baud required of old callers ---------"  + STR$(MIN.OLDCALLER.BAUD)
  516.       PRINT "244. Modem flow control uses Clear-to-Send (CTS)--- " + RTS$
  517.       PRINT "245. Modem flow control uses XON/XOFF ------------- " + FNYESNO$(XON.XOFF)
  518.       PRINT "246. Seconds to wait for carrier after answering --"  + STR$(MAX.CARRIER.WAIT)
  519.       GOTO 12580
  520. 12510 DISPLAYED.PAGE.NUMBER = 14
  521.       GOSUB 24800
  522.       LOCATE 3,1                                                     ' KG080301
  523.       IF TIME.TO.DROP.TO.DOS < 1 THEN _                              ' KG080301
  524.          TIME.TO.DROP.TO.DOS$ = NONE.PICKED$ _                       ' KG080301
  525.       ELSE TIME.TO.DROP.TO.DOS$ = STRING$(4 - (LEN(STR$(TIME.TO.DROP.TO.DOS)) - 1),"0") + MID$(STR$(TIME.TO.DROP.TO.DOS),2) ' KG080301
  526. 12512 PRINT "261. Time of day to exit to DOS ------------------- " + TIME.TO.DROP.TO.DOS$
  527.       PRINT "262. Net mail to invoke is ------------------------ " + NET.MAIL$
  528.       X$ = HOST.ECHO.ON$
  529.       IF HOST.ECHO.ON$ = "" THEN _
  530.          X$ = NONE.PICKED$
  531.       PRINT "263. Command for intermediate host to ECHO -------- " + X$
  532.       X$ = HOST.ECHO.OFF$
  533.       IF HOST.ECHO.OFF$ = "" THEN _
  534.          X$ = NONE.PICKED$
  535.       PRINT "264. Command for intermediate host NOT to ECHO ---- " + X$
  536.       X = INSTR("ICR",DEFAULT.ECHOER$)
  537.       X$ = MID$("Intermediate hostCaller's softwareRBBS-PC",1 + 17 * (X - 1),17)
  538.       PRINT "265. Who echos what a remote caller types? -------- " + X$
  539.       X$ = DEFAULT.LINE.ACK$
  540.       IF DEFAULT.LINE.ACK$ = "" THEN _
  541.          X$ = NONE.PICKED$
  542.       PRINT "266. String to acknowlege line in ASCII upload ---- "+ X$
  543.       PRINT "267. Name of sorted file list used in up/download = "; FAST.FILE.LIST$ ' 102201
  544.       PRINT "268. Name of locator file used in up/download ----- "; FAST.FILE.LOCATOR$ ' 102201
  545.       GOTO 12580
  546. 12520 DISPLAYED.PAGE.NUMBER = 15
  547.       GOSUB 24800
  548.       LOCATE  3,1
  549.       PRINT "281. Let new users set their preferences --------- " ; FNYESNO$(NEWUSER.SETS.DEFAULTS)
  550.       PRINT "282. New users default sign-on mode -------------- " + NOT.YET.IN$ ' NEW.USER.DEFAULT.MODE$
  551.       PRINT "283. New users default file-transfer protocol ---- " + NOT.YET.IN$ ' NEW.USER.DEFAULT.PROTOCOL$
  552.       PRINT "284. Line feeds for new users default to --------- " + NOT.YET.IN$ ' NEW.USER.LINE.FEEDS$
  553.       PRINT "285. Nulls for new users default to -------------- " + NOT.YET.IN$ ' NEW.USER.NULLS$
  554.       PRINT "286. Prompt bell for new users defaults to ------- " + NOT.YET.IN$ ' NEW.USER.BELL$
  555.       PRINT "287. New users 'graphics' capability is assumed -- " + NOT.YET.IN$ ' NEW.USER.GRAPHICS$
  556.       PRINT "288. New users are assumed UPPERCASE only -------- " + NOT.YET.IN$ ' NEW.USER.CASE$
  557.       PRINT "289. New users message margins defaults to ------- " + NOT.YET.IN$ ' STR$(NEW.USER.MARGINS)
  558.       PRINT "290. Add new users to USERS file ----------------- " ; FNYESNO$(REMEMBER.NEW.USERS)
  559.       PRINT "291. Let new users on even when USERS file full -- " ; FNYESNO$(SURVIVE.NOUSER.ROOM)
  560.       GOTO 12580
  561. 12530 DISPLAYED.PAGE.NUMBER = 16
  562.       GOSUB 24800
  563.       LOCATE  3,1
  564.       X$ = LIBRARY.DRIVE$
  565.       IF LIBRARY.DRIVE$ = "" THEN _
  566.          X$ = NONE.PICKED$
  567.       PRINT "301. Library drive ------------------------------- " + X$
  568.       PRINT "302. Drive/Path for Library directory ------------ " + LIBRARY.DIRECTORY.PATH$
  569.       PRINT "303. Extension for Library directory ------------- " + LIBRARY.DIRECTORY.EXTENTION$
  570.       PRINT "304. Drive/Path for Library work/RAM disk -------- " + LIBRARY.WORK.DISK.PATH$
  571.       PRINT "305. # of disks in Library -----------------------" + STR$(LIBRARY.MAX.DISK)
  572.       PRINT "306. # of master Library subdirectories ----------" + STR$(LIBRARY.MAX.DIRECTORY)
  573.       PRINT "307. # of subdirectories in each master ----------" + STR$(LIBRARY.MAX.SUBDIR)
  574.       PRINT "308. Prefix of Library subdirectories ------------ " + LIBRARY.SUBDIR.PREFIX$
  575.       PRINT "309. Name of Library subsystem command menu ------ " + MENU$(6)
  576.       PRINT "310. Symbols to use for Library menu commands ---- " + LIBRARY.COMMANDS$
  577.       M27$ = STR$(PS)
  578.       IX = LIBRARY.FUNCTION(1)
  579.       FOR I = 1 TO NUM.LIBRARY
  580.          IF IX<>LIBRARY.FUNCTION(I) THEN _
  581.             M27$ = "(Variable)" : _
  582.             GOTO 12531
  583.       NEXT
  584. 12531 PRINT "311. Security level for Library menu functions --- " + M27$
  585.       PRINT "312. Drive/Path of archive utility --------------- " + LIBRARY.ARCHIVE.PATH$
  586.       PRINT "313. Name of executable archive utility ---------- " + LIBRARY.ARCHIVE.PROGRAM$
  587.       GOTO 12580
  588. 12540 DISPLAYED.PAGE.NUMBER = 17
  589.       GOSUB 24800
  590.       LOCATE  3,1
  591.       X$ = EMPHASIZE.ON.DEF$
  592.       IF EMPHASIZE.ON.DEF$ = "" THEN _
  593.          X$ = NONE.PICKED$
  594.       PRINT "321. String to turn ON Graphic Emphasis ----------- " + X$
  595.       X$ = EMPHASIZE.OFF.DEF$
  596.       IF EMPHASIZE.OFF.DEF$ = "" THEN _
  597.          X$ = NONE.PICKED$
  598.       PRINT "322. String to restore normal text (Emphasis OFF) - " + X$
  599.       PRINT "323. Caller's Foreground color 1 ------------------ " + FG.1.DEF$
  600.       PRINT "324. Caller's Foreground color 2 ------------------ " + FG.2.DEF$
  601.       PRINT "325. Caller's Foreground color 3 ------------------ " + FG.3.DEF$
  602.       PRINT "326. Caller's Foreground color 4 ------------------ " + FG.4.DEF$
  603.       X$ = MID$("<none>Blue  Green Cyan  Red   PurpleYellowWhite",CALLER.BKGRD*6+1,6)
  604.       PRINT "327. Caller's Background color -------------------- " ; X$
  605.       GOTO 12580
  606. 12550 DISPLAYED.PAGE.NUMBER = 18
  607.       GOSUB 24800
  608.       GOTO 12580
  609. 12580 IF PRE.DISPLAY THEN _
  610.          PRE.DISPLAY = FALSE : _
  611.          GOTO 12622
  612.       GOSUB 24890
  613. 12590 GOSUB 22160
  614. 12592 IF IX THEN _            'IX       Key    Where to branch to
  615.          ON IX GOTO 12360, _  ' 1       F1 - Global Parameters (Part 1)
  616.                     12370, _  ' 2       F2 - Global Parameters (Part 2)
  617.                     12380, _  ' 3       F3 - Global Parameters (Part 3)
  618.                     12390, _  ' 4       F4 - RBBS-PC System Files (Part 1)
  619.                     12400, _  ' 5       F5 - RBBS-PC System Files (Part 2)
  620.                     12410, _  ' 6       F6 - RBBS-PC "doors"
  621.                     12420, _  ' 7       F7 - RBBS-PC security parms. (Part 1)
  622.                     12466, _  ' 8       F8 - RBBS-PC security parms. (Part 2)
  623.                     12470, _  ' 9       F9 - Multiple RBBS-PC parameters
  624.                     12480, _  '10      F10 - RBBS-PC's utilities
  625.                     12490, _  '11 Shift-F1 - RBBS-PC File Manager
  626.                     12500, _  '12 Shift-F2 - RBBS-PC comm. parameters (Part 1)
  627.                     12505, _  '13 Shift-F3 - RBBS-PC comm. parameters (Part 2)
  628.                     12510, _  '14 Shift-F4 - RBBS-PC Net Mail
  629.                     12520, _  '15 Shift-F5 - New user parameters
  630.                     12530, _  '16 Shift-F6 - Library parameters
  631.                     12540, _  '17 Shift-F7 - RBBS-PC Color parameters
  632.                     12310, _  '18 Shift-F8 - Reserved for future use
  633.                     12340, _  '19     PgUp - Go to previous page
  634.                     12330, _  '20     PgDn - Go to next page
  635.                     12630, _  '21      End - Terminate CONFIG
  636.                     12620     '22 Enter - Option selected followed by "enter"
  637.       GOTO 12590
  638. 12620 GOSUB 50340
  639.       IF VAL(HJ$) < 1 OR VAL(HJ$) > 331 THEN _
  640.          GOTO 12580
  641.       IPAGE = INT((VAL(HJ$) - 1) / 20)
  642.       IF DISPLAYED.PAGE.NUMBER <> IPAGE+1 THEN _
  643.          PRE.DISPLAY = TRUE : _
  644.          IX = IPAGE+1 : _
  645.          GOTO 12592
  646. 12622 ILOOKUP = VAL(HJ$) - (20 * IPAGE)
  647.       IPAGE = IPAGE + 1
  648.       IF ILOOKUP < 1 THEN _
  649.          ILOOKUP = 20 : _
  650.          IPAGE = IPAGE - 1
  651. 12630 EXIT SUB
  652. '
  653. ' * COMMON SUBROUTINE TO HANDLE THE FUNCTION KEYS, SCROLL BETWEEN CONFIG'S
  654. ' * PAGES OF OPTIONS, AND USER'S SELECTING A NUMERIC 4-CHARACTER OPTION.
  655. '
  656. 22160 I! = FRE(C$)
  657.       IX = 0
  658.       IF KSTACKED$ = "" THEN _
  659.          GOTO 22161
  660.       X = INSTR(KSTACKED$,CHR$(13))
  661.       IF X > 0 THEN _
  662.          IX = 22 : _
  663.          HJ$ = LEFT$(KSTACKED$,X-1) : _
  664.          KSTACKED$ = RIGHT$(KSTACKED$,LEN(KSTACKED$)-X) : _
  665.          OPTION$ = HJ$ : _
  666.          RETURN
  667.       Y$ = CHR$(0) + CHR$(68)
  668.       IF KSTACKED$ = "END" THEN _
  669.          Y$ = CHR$(0) + CHR$(79)
  670.       KSTACKED$ = ""
  671.       GOTO 22240
  672. 22161 Y$ = INKEY$
  673.       IF LEN(Y$) < 1 THEN _
  674.          GOTO 22161
  675.       IF LEN(Y$) = 2 THEN _               ' IF A FUNCTION KEY, BRANCH
  676.          GOTO 22240
  677.       IF ASC(Y$) = 13 THEN _              ' IF A CARRIAGE RETURN, RETURN
  678.          IX = 22 : _
  679.          RETURN
  680.       IF ASC(Y$) = 8 AND LEN(HJ$) > 0 THEN _
  681.          HJ$ = LEFT$(HJ$,LEN(HJ$) - 1) : _
  682.          PRINT CHR$(29) + " " + CHR$(29); : _
  683.          GOTO 22161
  684.       IF ASC(Y$) < 48 OR ASC(Y$) > 57 THEN _
  685.          GOTO 22161
  686.       PRINT Y$;
  687.       HJ$ = HJ$ + _
  688.             Y$
  689.       OPTION$ = HJ$
  690.       IF LEN(HJ$) > 4 THEN _              ' IF MORE THAN FOUR CHARACTERS,
  691.          IX = 22                          ' RETURN
  692.       RETURN
  693. '
  694. ' * COMMON SUBROUTINE TO HANDLE SET UP RETURN CODES FOR FUNCTION KEYS THAT
  695. ' * WERE PRESSED ON THE LOCAL PC RUNNING CONFIG
  696. '
  697. 22240 IX = ASC(RIGHT$(Y$,1))
  698.       IF IX < 59 OR IX > 91 THEN _        ' IGNORE IF NOT F1 THROUGH F10 OR
  699.          IX = 0: _                        ' SHIFT-F1 THROUGH SHIFT-F8
  700.          RETURN
  701.       IF IX = 73 THEN _                   ' IF PGUP THEN SET IX = 19
  702.          IX = 19 : _
  703.          RETURN
  704.       IF IX = 79 THEN _                   ' IF END THEN SET IX = 21
  705.          IX = 21 : _
  706.          RETURN
  707.       IF IX = 81 THEN _                   ' IF PGDN THEN SET IX = 20
  708.          IX = 20 : _
  709.          RETURN
  710.       IF (IX-58) < 11 THEN _              ' IF F1 THROUGH F10 SET IX = 1
  711.          IX = IX - 58 : _                 ' THROUGH 10 ACCORDINGLY.
  712.          RETURN
  713.       IF (IX-73) > 10 AND _               ' IF SHIFT-F1 THROUGH SHIFT-F8 THEN
  714.          (IX-73) < 19 THEN _              ' SET IX = 11 THROUGH 18
  715.             IX = IX - 73 : _              ' ACCORDINGLY.
  716.             RETURN
  717.       IX = 0
  718.       RETURN
  719. '
  720. ' * ROUTINE TO DISPLAY THE PAGE HEADER FOR CONFIG'S DISPLAYS
  721. '
  722. 24800 CLS
  723.       I! = FRE(C$)
  724.       COLOR 0,7,0
  725.       LOCATE 1,10
  726.       PRINT "RBBS-PC " + CONFIG.VERSION$ + " Configuration ";
  727.       IF CONFERENCE.MODE THEN _
  728.          GOSUB 24970
  729.       COLOR FG,BG,BORDER
  730.       PRINT " Page" + STR$(DISPLAYED.PAGE.NUMBER) + " of" + STR$(MAXIMUM.DISPLAYABLE.PAGES)
  731.       RETURN
  732. 24890 A$ = "Enter parameter # to change, END to update, PgUp/PgDn to scroll:"
  733. 24900 LOCATE 24,5
  734.       PRINT A$;
  735.       X = POS(0) + 2
  736.       PRINT STRING$((75 - LEN(A$)),32);
  737.       LOCATE 24,X
  738.       COLOR FG,BG,BORDER
  739.       HJ$ = "
  740.       I! = FRE(C$)
  741.       RETURN
  742. '
  743. ' * ROUTINE TO DISPLAY CONFERENCE MAINTENANCE MODE IN CONFIG'S DISPLAYS
  744. '
  745. 24970 LOCATE 2,1
  746.       PRINT SPACE$(10)
  747.       LOCATE 2,10                                                    ' KG062303
  748.       PRINT "(Conference Maintenance Mode for " + _                  ' KG062303
  749.             ZConfName$ + _                                           ' KG062303
  750.             ")";
  751.       RETURN
  752. '
  753. ' * COMMON SUBROUTINE TO READ THE MESSAGES FILE'S CHECKPOINT RECORD
  754. '
  755. 30040 IF NETWORK.TYPE = 6 THEN _
  756.          OPEN MAIN.MESSAGE.FILE$ FOR RANDOM SHARED AS #2 LEN=128 _
  757.       ELSE OPEN "R",2,MAIN.MESSAGE.FILE$,128
  758.       FIELD 2,128 AS RR$
  759.       GET 2,1
  760.       CALLS.TODATE! = VAL(MID$(RR$,1,8))             '  1-  8  =  number of last message on system
  761.       FIRST.USER.RECORD = VAL(MID$(RR$,52,5))        ' 52- 56  =  first rec. of user file
  762.       CURRENT.USER.COUNT = VAL(MID$(RR$,57,5))       ' 57- 61  =  next avail. user record
  763.       HIGHEST.USER.RECORD = VAL(MID$(RR$,62,5))      ' 62- 66  =  last rec. of user file
  764.       FIRST.MESSAGE.RECORD = VAL(MID$(RR$,68,7))     ' 68- 74 = first rec. of msgs file
  765.       NEXT.MESSAGE.RECORD = VAL(MID$(RR$,75,7))      ' 75- 81 = next avail. msgs record
  766.       HIGHEST.MESSAGE.RECORD = VAL(MID$(RR$,82,7))   ' 82- 88 = last rec. of msgs file
  767.       MAXIMUM.NUMBER.OF.MSGS = VAL(MID$(RR$,89,7))   ' 89- 95 = maximum number of messages
  768.       MAXIMUM.NUMBER.OF.NODES = VAL(MID$(RR$,127,2)) '127-128 = maximum number of "nodes"
  769.       CLOSE 2
  770.       RETURN
  771. '
  772. ' * COMMON ROUTINE TO GET THE LENGTH OF A FILE
  773. '
  774. 30180 IF NETWORK.TYPE = 6 THEN _
  775.          OPEN FILE$ FOR RANDOM SHARED AS #2 LEN=128 _
  776.       ELSE OPEN "R",2,FILE$,128
  777.       FIELD 2,128 AS RR$
  778.       UG = LOF(2) / 128
  779.       CLOSE 2
  780.       RETURN
  781. '
  782. ' * COMMON SUBROUTINE TO KEEP STRING SPACE CLEAN AND CLEAR LINE 24
  783. '
  784. 50340 I! = FRE(C$)
  785.       LOCATE 24,1
  786.       PRINT STRING$(79,32);
  787.       RETURN
  788. '
  789. ' * COMMON SUBROUTINE TO DISPLAY A MESSAGE ON LINE 24
  790. '
  791. 50345 GOSUB 50340
  792.       LOCATE 24,5
  793.       PRINT XX$;
  794.       RETURN
  795. '
  796. ' * COMMON SUBROUTINE TO BEEP AT THE SYSOP
  797. '
  798. 60380 FOR I = 1 TO 3
  799.         BEEP
  800.       NEXT
  801.       RETURN
  802.       END SUB
  803. '  $SUBTITLE: 'NETTYPE - subroutine to select supported networks'
  804. '  $PAGE
  805. '
  806. '  SUBROUTINE NAME    --  NETTYPE
  807. '
  808. '  INPUT PARAMETERS   --  MLCOM
  809. '                         NETWORK.TYPE
  810. '                         NETWORK.TYPE$
  811. '                         SUBROUTINE.PARAMETER
  812. '
  813. '  OUTPUT PARAMETERS  --  MLCOM
  814. '                         NETWORK.TYPE
  815. '                         NETWORK.TYPE$
  816. '
  817. '  SUBROUTINE PURPOSE --  TO SELECT THE RBBS-PC SUPPORTED NETWORKS
  818. '
  819.       SUB NETTYPE STATIC
  820.       ON SUBROUTINE.PARAMETER GOTO 60382,60384
  821. 60382 CLS
  822.       LOCATE 3,1
  823.       PRINT "     RBBS-PC is supported in the following:"
  824.       PRINT "                   Environment"
  825.       PRINT "          0. Single RBBS-PC in an IBM DOS environment"
  826.       PRINT "          1. MultiLink (multi-tasking under single DOS)"
  827.       PRINT "          2. Omninet (CORVUS)"
  828.       PRINT "          3. PC-NET (Orchid)"
  829.       PRINT "          4. DESQview (Quarterdeck)"
  830.       PRINT "          5. 10 NET (Fox Research)"
  831.       PRINT "          6. NETBIOS (DOS SHARE)"
  832.       PRINT "          7. DoubleDOS, but file sharing not supported."
  833. 60383 XX$ = "Select environment (0 to 7, [ENTER] quits)"
  834.       I! = FRE(C$)
  835.       LOCATE 24,1
  836.       PRINT STRING$(79,32);
  837.       LOCATE 24,5
  838.       PRINT XX$;
  839.       LINE INPUT;X$
  840.       IF X$ = "" THEN _
  841.          EXIT SUB
  842.       NETWORK.TYPE = VAL(X$)
  843.       IF NETWORK.TYPE < 0 OR NETWORK.TYPE > 7 THEN _
  844.          GOTO 60383
  845. 60384 IF NETWORK.TYPE = 0 THEN _
  846.          NETWORK.TYPE$ = "IBM's DOS"
  847.       IF NETWORK.TYPE = 1 THEN _
  848.          MLCOM = TRUE : _
  849.          NETWORK.TYPE$ = "MultiLink"
  850.       IF NETWORK.TYPE = 2 THEN _
  851.          NETWORK.TYPE$ = "Omninet"
  852.       IF NETWORK.TYPE = 3 THEN _
  853.          NETWORK.TYPE$ = "PC-NET"
  854.       IF NETWORK.TYPE = 4 THEN _
  855.          NETWORK.TYPE$ = "DESQview"
  856.       IF NETWORK.TYPE = 5 THEN _
  857.          NETWORK.TYPE$ = "10 NET"
  858.       IF NETWORK.TYPE = 6 THEN _
  859.          NETWORK.TYPE$ = "NETBIOS"
  860.       IF NETWORK.TYPE = 7 THEN _
  861.          NETWORK.TYPE$ = "No file sharing!"
  862.       IF SUBROUTINE.PARAMETER = 2 THEN _
  863.          EXIT SUB
  864.       IF NETWORK.TYPE = 2 OR NETWORK.TYPE = 3 OR NETWORK.TYPE = 5 OR NETWORK.TYPE = 6 THEN _
  865.          CALL GETNUMYN ("Are you running Multi-Link with " + NETWORK.TYPE$,MLCOM)
  866.       END SUB
  867. '  $SUBTITLE: 'CNFGINIT - subroutine to initialize CONFIG's constants'
  868. '  $PAGE
  869. '
  870. '  SUBROUTINE NAME    --  CNFGINIT
  871. '
  872. '  INPUT PARAMETERS   --  NONE
  873. '
  874. '  OUTPUT PARAMETERS  --  CONFIG'S CONSTANTS INITIALIZED
  875. '
  876. '  SUBROUTINE PURPOSE --  TO INITIALIZE THE CONSTANTS USED BY CONFIG
  877. '
  878. 60385 SUB CNFGINIT STATIC
  879. '
  880. ' * INITALIZE ALL VARIABLES IF A .DEF FILE DOESN'T AREADY EXIST
  881. '
  882.       D$ = DD$
  883.       DRV$ = LEFT$(D$,1)
  884.       FALSE                      = 0
  885.       TRUE                       = NOT FALSE
  886.       SYSOP.SECURITY.LEVEL       = 10
  887.       ACT.MNTHS.B4.DELETING      = 1
  888.       ACTIVE.BULLETINS           = 6
  889.       ADD.DIR.SECURITY           = SYSOP.SECURITY.LEVEL
  890.       ALLOW.CALLER.TURBO         = 6
  891.       ALTDIR.EXTENSION$          = ""
  892.       ALWAYS.STREW.TO$           = ""
  893.       ANS.MENU$                  = D$ + "MENUA"
  894.       ASK.EXTENDED.DESC          = SYSOP.SECURITY.LEVEL
  895.       ASK.IDENTITY               = FALSE
  896.       AUTO.ADD.SECURITY          = 5
  897.       AUTO.UPGRADE.SEC           = SYSOP.SECURITY.LEVEL
  898.       AUTOPAGE.DEF$              = D$ + "AUTOPAGE.DEF"
  899.       BG                         = 0
  900.       BORDER                     = 0
  901.       BUFFER.SIZE                = 128
  902.       BULLETIN.MENU$             = "BULLET"
  903.       BULLETIN.PREFIX$           = "BULLET"
  904.       BULLETINS.OPTIONAL         = TRUE
  905.       C$                         = ""
  906.       CALLER.BKGRD               = 0
  907.       CALLERS.FILE$              = D$ + "CALLERS"
  908.       SEC.KILL.ANY               = SYSOP.SECURITY.LEVEL
  909.       COM.PORT$                  = "COM1"
  910.       COMMANDS.BETWEEN.RINGS     = FALSE
  911.       COMMANDS.IN.PROMPT         = TRUE
  912.       COMMENTS.AS.MESSAGES       = FALSE
  913.       COMMENTS.FILE$             = D$ + "COMMENTS"
  914.       COMPRESSED.EXT$            = ".ARC.PAK"
  915.       COMPUTER.TYPE              = 0
  916.       CONFERENCE.MENU$           = D$ + "CONFENCE"
  917.       CONFERENCE.VIEWER.SEC.LVL  = 0
  918.       CONFMAIL.LIST$             = D$ + "CONFMAIL.DEF"
  919.       CONFIG.VERSION$            = "Version 17.3A"                   ' DA081003
  920.       DEFAULT.CATEGORY.CODE$     = "UNC"
  921.       DAYS.IN.SUBSCRIPTION.PERIOD = 365
  922.       DAYS.TO.WARN               = 60
  923.       DIR.CATEGORY.FILE$         = D$ + "DIR.CAT"
  924.       DIRECTORY.PREFIX$          = "DIR"
  925.       DEFAULT.ECHOER$            = "R"
  926.       DEFAULT.LINE.ACK$          = ""
  927.       DEFAULT.SECURITY.LEVEL     = 5
  928.       DIRECTORY.EXTENTION$       = "DIR"
  929.       DIRECTORY.PATH$            = D$
  930.       DISK.FOR.DOS$              = D$
  931.       DISKFULL.GO.OFFLINE        = TRUE
  932.       DNLD.SUB                   = 0
  933.       DOORS.AVAILABLE            = FALSE
  934.       DOORS.DEF$                 = D$ + "DOORS.DEF"
  935.       DOORS.TERMINAL.TYPE        = 8
  936.       DOSANSI                    = FALSE
  937.       DOS.VERSION                = 2
  938.       DOWNLOAD.DRIVES$           = DRV$ + DRV$
  939.       DOWNLOAD.TO.SUBDIR         = FALSE
  940.       DRIVE.FOR.BULLETINS$       = D$
  941.       DRIVE.FOR.HELP.FILES$      = D$
  942.       DTR.DROP.DELAY             = 3
  943.       DUMB.MODEM                 = FALSE
  944.       ECHOER$                    = "R"
  945.       EMPHASIZE.OFF.DEF$         = "[27]" + "[0;40;33m"
  946.       EMPHASIZE.ON.DEF$          = "[27]" + "[1;41;37m"
  947.       END.OFFICE.HOURS           = 2200
  948.       ENFORCE.UPLOAD.DOWNLOAD.RATIOS = FALSE
  949.       EPILOG$                    = D$ + "EPILOG.DEF"
  950.       ESCAPE.INSECURE            = FALSE
  951.       EXPERT.USER                = 0
  952.       EXPIRED.SECURITY           = DEFAULT.SECURITY.LEVEL
  953.       EXTENDED.LOGGING           = FALSE
  954.       EXTENSION.LIST$            = "ZIP"
  955.       FAST.FILE.LIST$            = D$ + "FIDX.DEF"
  956.       FAST.FILE.LOCATOR$         = D$ + "LIDX.DEF"
  957.       FC                         = 5
  958.       FG                         = 7
  959.       FG.1.DEF$                  = "Bright Green"
  960.       FG.2.DEF$                  = "Bright Yellow"
  961.       FG.3.DEF$                  = "Bright Purple"
  962.       FG.4.DEF$                  = "Bright Cyan"
  963.       FILE.COMMANDS.DEFAULTS$    = "DGLNPSUV"
  964.       FILE.COMMANDS$             = FILE.COMMANDS.DEFAULTS$
  965.       FILE.NOTIFY                = FALSE
  966.       FILES.FUNCTION$(1,1)       = "D)ownload a file      "
  967.       FILES.FUNCTION$(2,1)       = "G)oodbye              "
  968.       FILES.FUNCTION$(3,1)       = "L)ist file directory  "
  969.       FILES.FUNCTION$(4,1)       = "N)ew file search      "
  970.       FILES.FUNCTION$(5,1)       = "P)ersonal files       "
  971.       FILES.FUNCTION$(6,1)       = "S)earch files         "
  972.       FILES.FUNCTION$(7,1)       = "U)pload a file        "
  973.       FILES.FUNCTION$(8,1)       = "V)erbose archive list "
  974.       FILES.FUNCTION$(1,2)       = "D"
  975.       FILES.FUNCTION$(2,2)       = "G"
  976.       FILES.FUNCTION$(3,2)       = "L"
  977.       FILES.FUNCTION$(4,2)       = "N"
  978.       FILES.FUNCTION$(5,2)       = "P"
  979.       FILES.FUNCTION$(6,2)       = "S"
  980.       FILES.FUNCTION$(7,2)       = "U"
  981.       FILES.FUNCTION$(8,2)       = "V"
  982.       FILESEC.FILE$              = D$ + "FILESEC"
  983.       FIRST.NAME.PROMPT$         = "FIRST name"
  984.       FOSSIL                     = 0
  985.       GB                         = FC
  986.       GLOBAL.COMMANDS.DEFAULTS$  = "H?QX"
  987.       GLOBAL.COMMANDS$           = GLOBAL.COMMANDS.DEFAULTS$
  988.       GLOBAL.FUNCTION$(1,1)      = "H)elp on-line           "
  989.       GLOBAL.FUNCTION$(2,1)      = "?)help on-line (=H)     "
  990.       GLOBAL.FUNCTION$(3,1)      = "Q)uit this part         "
  991.       GLOBAL.FUNCTION$(4,1)      = "X)Expert toggle on/off  "
  992.       GLOBAL.FUNCTION$(1,2)      = "H"
  993.       GLOBAL.FUNCTION$(2,2)      = "?"
  994.       GLOBAL.FUNCTION$(3,2)      = "Q"
  995.       GLOBAL.FUNCTION$(4,2)      = "X"
  996.       GO.TO.SHELL                = TRUE
  997.       HELP$(3)                   = "HELP03"
  998.       HELP$(4)                   = "HELP04"
  999.       HELP$(7)                   = "HELP07"
  1000.       HELP$(9)                   = "HELP09"
  1001.       HELP.EXTENSION$            = "HLP"
  1002.       HELP.FILE.PREFIX$          = "HELP0"
  1003.       HELP.PATH$                 = D$
  1004.       HOST.ECHO.OFF$             = ""
  1005.       HOST.ECHO.ON$              = ""
  1006.       IB                         = 0
  1007.       KEEP.INIT.BAUD             = FALSE
  1008.       KEEP.TIME.CREDITS          = FALSE
  1009.       LAST.NAME.PROMPT$          = "LAST name"
  1010.       LEN.HASH                   = 31
  1011.       LEN.INDIV                  = 0
  1012.       LIBRARY.ARCHIVE.PATH$        = D$
  1013.       LIBRARY.ARCHIVE.PROGRAM$     = "ARCA "
  1014.       LIBRARY.COMMANDS.DEFAULTS$   = "ACDGLSV"
  1015.       LIBRARY.COMMANDS$            = LIBRARY.COMMANDS.DEFAULTS$
  1016.       LIBRARY.DRIVE$               = ""
  1017.       LIBRARY.MAX.DISK             = 705
  1018.       LIBRARY.MAX.DIRECTORY        = 7
  1019.       LIBRARY.MAX.SUBDIR           = 100
  1020.       LIBRARY.SUBDIR.PREFIX$       = "DISK"
  1021.       LIBRARY.DIRECTORY.PATH$      = D$
  1022.       LIBRARY.DIRECTORY.EXTENTION$ = "CDR"
  1023.       LIBRARY.FUNCTION$(1,1)       = "A)rchive a Library disk  "
  1024.       LIBRARY.FUNCTION$(2,1)       = "C)hange Library disk     "
  1025.       LIBRARY.FUNCTION$(3,1)       = "D)ownload a file         "
  1026.       LIBRARY.FUNCTION$(4,1)       = "G)oodbye                 "
  1027.       LIBRARY.FUNCTION$(5,1)       = "L)ist a file directory   "
  1028.       LIBRARY.FUNCTION$(6,1)       = "S)earch files            "
  1029.       LIBRARY.FUNCTION$(7,1)       = "V)erbose archive list    "
  1030.       LIBRARY.FUNCTION$(1,2)       = "A"
  1031.       LIBRARY.FUNCTION$(2,2)       = "C"
  1032.       LIBRARY.FUNCTION$(3,2)       = "D"
  1033.       LIBRARY.FUNCTION$(4,2)       = "G"
  1034.       LIBRARY.FUNCTION$(5,2)       = "L"
  1035.       LIBRARY.FUNCTION$(6,2)       = "S"
  1036.       LIBRARY.FUNCTION$(7,2)       = "V"
  1037.       LIBRARY.WORK.DISK.PATH$      = D$
  1038.       LIMIT.SEARCH.TO.FMS        = FALSE
  1039.       LOGON.MAIL.LEVEL$          = "A"
  1040.       LSB                        = 1016
  1041. 60390 MACRO.DRVPATH$             = D$
  1042.       MACRO.EXTENSION$           = ""
  1043.       MAIN.COMMANDS.DEFAULTS$    = "ABCDEFIJKOPRSTUVW@"
  1044.       MAIN.COMMANDS$             = MAIN.COMMANDS.DEFAULTS$
  1045.       MAIN.FUNCTION$(1,1)        = "A)nswer questionnaire  "
  1046.       MAIN.FUNCTION$(2,1)        = "B)ulletins             "
  1047.       MAIN.FUNCTION$(3,1)        = "C)omments              "
  1048.       MAIN.FUNCTION$(4,1)        = "D)oor subsystem        "
  1049.       MAIN.FUNCTION$(5,1)        = "E)nter message         "
  1050.       MAIN.FUNCTION$(6,1)        = "F)iles subsystem       "
  1051.       MAIN.FUNCTION$(7,1)        = "I)nitial welcome       "
  1052.       MAIN.FUNCTION$(8,1)        = "J)oin a conference     "
  1053.       MAIN.FUNCTION$(9,1)        = "K)ill messages         "
  1054.       MAIN.FUNCTION$(10,1)       = "O)perator page         "
  1055.       MAIN.FUNCTION$(11,1)       = "P)ersonal mail         "
  1056.       MAIN.FUNCTION$(12,1)       = "R)ead messages         "
  1057.       MAIN.FUNCTION$(13,1)       = "S)can messages header  "
  1058.       MAIN.FUNCTION$(14,1)       = "T)opic msg scan        "
  1059.       MAIN.FUNCTION$(15,1)       = "U)tilities subsystem   "
  1060.       MAIN.FUNCTION$(16,1)       = "V)iew conference mail  "
  1061.       MAIN.FUNCTION$(17,1)       = "W)ho's on other nodes  "
  1062.       MAIN.FUNCTION$(18,1)       = "@)Library subsystem    "
  1063.       MAIN.FUNCTION$(1,2)        = "A"
  1064.       MAIN.FUNCTION$(2,2)        = "B"
  1065.       MAIN.FUNCTION$(3,2)        = "C"
  1066.       MAIN.FUNCTION$(4,2)        = "D"
  1067.       MAIN.FUNCTION$(5,2)        = "E"
  1068.       MAIN.FUNCTION$(6,2)        = "F"
  1069.       MAIN.FUNCTION$(7,2)        = "I"
  1070.       MAIN.FUNCTION$(8,2)        = "J"
  1071.       MAIN.FUNCTION$(9,2)        = "K"
  1072.       MAIN.FUNCTION$(10,2)       = "O"
  1073.       MAIN.FUNCTION$(11,2)       = "P"
  1074.       MAIN.FUNCTION$(12,2)       = "R"
  1075.       MAIN.FUNCTION$(13,2)       = "S"
  1076.       MAIN.FUNCTION$(14,2)       = "T"
  1077.       MAIN.FUNCTION$(15,2)       = "U"
  1078.       MAIN.FUNCTION$(16,2)       = "V"
  1079.       MAIN.FUNCTION$(17,2)       = "W"
  1080.       MAIN.MESSAGE.BACKUP$       = D$ + "MESSAGES.BAK"
  1081.       MAIN.MESSAGE.FILE$         = D$ + "MESSAGES"
  1082.       MAIN.PUI$                  = D$ + "MAIN.PUI"
  1083.       MAIN.USER.FILE$            = D$ + "USERS"
  1084.       MASTER.DIRECTORY.NAME$     = ""
  1085.       MAX.ALLOWED.MSGS.FRM.DEF   = 5
  1086.       MAX.CARRIER.WAIT           = 30
  1087.       MAX.DESC.LEN               = 40
  1088.       MAX.EXTENDED.LINES         = 2
  1089.       MAX.MESSAGE.LINES          = 19
  1090.       MAX.PER.DAY                = 0
  1091.       MAX.REG.SEC                = 0
  1092.       MAX.USR.FILE.SIZE.FRM.DEF  = 16
  1093.       MAX.WORK.VAR               = 30
  1094.       MAXD                       = 15
  1095.       MAXIMUM.DISPLAYABLE.PAGES  = 17
  1096.       MAXIMUM.PASSWORD.CHANGES   = 3
  1097.       MAXIMUM.VIOLATIONS         = 5
  1098.       MAXIMUM.NUMBER.OF.NODES    = 1
  1099.       MENU$(1)                   = D$ + "MENU1"
  1100.       MENU$(2)                   = D$ + "MENU2"
  1101.       MENU$(3)                   = D$ + "MENU3"
  1102.       MENU$(4)                   = D$ + "MENU4"
  1103.       MENU$(5)                   = D$ + "MENU5"
  1104.       MENU$(6)                   = D$ + "MENU6"
  1105.       MENUS.CAN.PAUSE            = TRUE
  1106.       MESSAGE.REMINDER           = TRUE
  1107.       MESSAGES.CAN.GROW          = FALSE
  1108.       MIN.NEWCALLER.BAUD         = 0
  1109.       MIN.OLDCALLER.BAUD         = 0
  1110.       MIN.SEC.TO.VIEW            = DEFAULT.SECURITY.LEVEL
  1111.       MINIMUM.LOGON.SECURITY     = 0
  1112.       MINIMUM.SECURITY.FOR.TEMP.PASSWORD = 5
  1113.       MINUTES.PER.SESSION!       = 72
  1114.       MLCOM                      = FALSE
  1115.       MM                         = 5
  1116.       MO$                        = DD$                               ' KG080901
  1117.       MUSIC                      = FALSE
  1118.       NET.MAIL$                  = "<none>"
  1119.       NETWORK.TYPE               = 0
  1120.       NETWORK.TYPE$              = "IBM's DOS"
  1121.       NEW.FILES.CHECK            = FALSE
  1122.       NEW.USER.QUESTIONNAIRE$    = D$ + "RBBS-REG.DEF"
  1123.       NEWUSER.FILE$              = D$ + "NEWUSER"
  1124.       NEWUSER.SETS.DEFAULTS      = TRUE
  1125.       OMIT.MAIN.DIRECTORY$       = "NO"
  1126.       OMIT.UPLOAD.DIRECTORY$     = "NO"
  1127.       OVERWRITE.SECURITY.LEVEL   = SYSOP.SECURITY.LEVEL
  1128.       PAGE.LENGTH                = 23
  1129.       PAGING.PRINTER.SUPPORT$    = ". "
  1130.       PASSWORD.FILE$             = D$ + "PASSWRDS"
  1131.       PCJR                       = FALSE
  1132.       PERSONAL.BEGIN             = 1
  1133.       PERSONAL.DIR$              = D$+"PRIV.DEF"
  1134.       PERSONAL.DRVPATH$          = D$
  1135.       PERSONAL.LEN               = 31
  1136.       PERSONAL.CONCAT            = FALSE
  1137.       PRELOG$                    = D$ + "PRELOG"
  1138.       PRIVATE.READ.SEC           = DEFAULT.SECURITY.LEVEL
  1139.       PROTO.DEF$                 = D$ + "PROTO.DEF"
  1140.       PROMPT.BELL                = 0
  1141.       PROMPT.HASH$               = "Name"
  1142.       PROMPT.INDIV$              = ""
  1143.       PS                         = 5
  1144.       PUBLIC.READ.SEC            = DEFAULT.SECURITY.LEVEL
  1145.       QUES.PATH$                 = D$
  1146.       RBBS.BAT$                  = D$ + "RBBS" + NODE.ID$ + ".BAT"
  1147.       RBBS.NAME$                 = "RBBS-PC"
  1148.       RCTTY.BAT$                 = D$ + "RCTTY" + NODE.ID$ + ".BAT"
  1149.       RECYCLE.TO.DOS             = 0
  1150.       RECYCLE.TO.DOS$            = "INTERNAL"
  1151.       RECYCLE.WAIT               = 0
  1152.       REDIRECT.IO.METHOD         = TRUE
  1153.       REGISTRATION.PROGRAM$      = "<none>"
  1154.       REMEMBER.NEW.USERS         = TRUE
  1155.       REMIND.FILE.TRANSFERS      = FALSE
  1156.       REMIND.PROFILE             = FALSE
  1157.       REQUIRE.NON.ASCII          = TRUE
  1158.       REQUIRED.QUESTIONNAIRE$    = "<none>"
  1159.       REQUIRED.RINGS             = 1
  1160.       RESTRICT.BAUD              = FALSE
  1161.       RESTRICT.BY.DATE           = FALSE
  1162.       RESTRICT.VALID.CMDS        = FALSE
  1163.       RTS$                       = "NO"
  1164.       SCREEN.OUT.MSG$            = "SEEN-BY: "
  1165.       SEC.CHANGE.MSG             = SYSOP.SECURITY.LEVEL
  1166.       SEC.LVL.EXEMPT.FRM.PURGING = SYSOP.SECURITY.LEVEL
  1167.       SECVIO.HLP$                = D$ + "SECVIO." + HELP.EXTENSION$
  1168.       SECURITY.EXEMPT.FROM.EPILOG= DEFAULT.SECURITY.LEVEL + 1
  1169.       SF                         = SYSOP.SECURITY.LEVEL
  1170.       SHOOT.YOURSELF             = FALSE
  1171.       SHOW.SECTION               = TRUE
  1172.       SIZE.OF.STACK              = 1024
  1173.       SL.CATEGORIZE.UPLOADS      = SYSOP.SECURITY.LEVEL
  1174.       SMART.TEXT                 = 123
  1175.       START.HASH                 = 1
  1176.       START.INDIV                = 0
  1177.       START.OFFICE.HOURS         = 800
  1178.       SURVIVE.NOUSER.ROOM        = FALSE
  1179.       SWITCH.BACK                = FALSE
  1180.       SYSOP.COMMANDS.DEFAULTS$   = "1234567"
  1181.       SYSOP.COMMANDS$            = SYSOP.COMMANDS.DEFAULTS$
  1182.       SYSOP.FUNCTION$(1,1)       = " 1 List comments      "
  1183.       SYSOP.FUNCTION$(2,1)       = " 2 List CALLERS log   "
  1184.       SYSOP.FUNCTION$(3,1)       = " 3 Recover a message  "
  1185.       SYSOP.FUNCTION$(4,1)       = " 4 Erase comments     "
  1186.       SYSOP.FUNCTION$(5,1)       = " 5 User maintenance   "
  1187.       SYSOP.FUNCTION$(6,1)       = " 6 Toggle Page bell   "
  1188.       SYSOP.FUNCTION$(7,1)       = " 7 Exit to DOS        "
  1189.       SYSOP.FUNCTION$(1,2)       = " 1"
  1190.       SYSOP.FUNCTION$(2,2)       = " 2"
  1191.       SYSOP.FUNCTION$(3,2)       = " 3"
  1192.       SYSOP.FUNCTION$(4,2)       = " 4"
  1193.       SYSOP.FUNCTION$(5,2)       = " 5"
  1194.       SYSOP.FUNCTION$(6,2)       = " 6"
  1195.       SYSOP.FUNCTION$(7,2)       = " 7"
  1196.       SYSOP.FIRST.NAME$          = "TOM"
  1197.       SYSOP.LAST.NAME$           = "MACK"
  1198.       SYSOP.MENU.SECURITY.LEVEL  = SYSOP.SECURITY.LEVEL
  1199.       SYSOP.PASSWORD.1$          = "SECRET"                          ' DA081004
  1200.       SYSOP.PASSWORD.2$          = "NAME"                            ' DA081004
  1201.       TIME.TO.DROP.TO.DOS        = 0
  1202.       TRASHCAN.FILE$             = D$ + "TRASHCAN"
  1203.       TURN.PRINTER.OFF           = FALSE
  1204.       TURBO.RBBS                 = TRUE
  1205.       UE                         = 5
  1206.       FMS.DIRECTORY$             = ""
  1207.       UPCAT.HELP$                = "UPCAT"
  1208.       UPLOAD.DIRECTORY$          = "99"
  1209.       UPLOAD.PATH$               = D$
  1210.       UPLOAD.SUBDIR$             = ""
  1211.       UPLOAD.TIME.FACTOR!        = 0
  1212.       UPLOAD.TO.SUBDIR           = FALSE
  1213.       USE.BASIC.WRITES           = FALSE
  1214.       USE.DEVICE.DRIVER$         = ""                                ' KG080901
  1215.       USER.LOCATION$             = "CITY and STATE"
  1216.       UTIL.COMMANDS.DEFAULTS$    = "BCEFGLMPRSTU"
  1217.       UTIL.COMMANDS$             = UTIL.COMMANDS.DEFAULTS$
  1218.       UTILITY.FUNCTION$(1,1)     = "B)aud rate            "
  1219.       UTILITY.FUNCTION$(2,1)     = "C)lock (time)         "
  1220.       UTILITY.FUNCTION$(3,1)     = "E)cho                 "
  1221.       UTILITY.FUNCTION$(4,1)     = "F)ile x-fer protocol  "
  1222.       UTILITY.FUNCTION$(5,1)     = "G)raphics             "
  1223.       UTILITY.FUNCTION$(6,1)     = "L)ines per page       "
  1224.       UTILITY.FUNCTION$(7,1)     = "M)sg margin setting   "
  1225.       UTILITY.FUNCTION$(8,1)     = "P)assword change      "
  1226.       UTILITY.FUNCTION$(9,1)     = "R)eview defaults      "
  1227.       UTILITY.FUNCTION$(10,1)    = "S)tatistics           "
  1228.       UTILITY.FUNCTION$(11,1)    = "T)oggle               "
  1229.       UTILITY.FUNCTION$(12,1)    = "U)ser log scan        "
  1230.       VOICE.TYPE                 = 0
  1231.       VOICE.TYPE$                = NONE.PICKED$
  1232.       XON.XOFF                   = FALSE
  1233.       FOR I = 1 TO LEN(UTIL.COMMANDS.DEFAULTS$)
  1234.          UTILITY.FUNCTION$(I,2) = MID$(UTIL.COMMANDS.DEFAULTS$,I,1)
  1235.       NEXT
  1236.       WAIT.BEFORE.DISCONNECT     = 180
  1237.       WELCOME.FILE$              = D$ + "WELCOME"
  1238.       WELCOME.INTERRUPTABLE      = TRUE
  1239.       WILL.SUBDIRS.B.USED        = FALSE
  1240.       WRITE.BUF.DEF              = 1024
  1241.       FOR I = 1 TO NUM.SYSOP
  1242.          SYSOP.FUNCTION(I) = SF
  1243.       NEXT
  1244.       FOR I = 1 TO NUM.MAIN
  1245.          MAIN.FUNCTION(I) = MM
  1246.       NEXT
  1247.       FOR I = 1 TO NUM.FILES
  1248.          FILES.FUNCTION(I) = FC
  1249.       NEXT
  1250.       FOR I = 1 TO NUM.LIBRARY
  1251.          LIBRARY.FUNCTION(I) = PS
  1252.       NEXT
  1253.       FOR I = 1 TO NUM.UTILITY
  1254.          UTILITY.FUNCTION(I) = UE
  1255.       NEXT
  1256.       FOR I = 1 TO NUM.GLOBAL
  1257.          GLOBAL.FUNCTION(I) = GB
  1258.       NEXT
  1259.       CALL MODEMINITCMD
  1260.       END SUB
  1261. '  $SUBTITLE: 'VOICETYPE - subroutine to select voice'
  1262. '  $PAGE
  1263. '
  1264. '  SUBROUTINE NAME    --  VOICETYPE
  1265. '
  1266. '  INPUT PARAMETERS   --  VOICE.TYPE
  1267. '                         VOICE.TYPE$
  1268. '                         SUBROUTINE.PARAMETER
  1269. '
  1270. '  OUTPUT PARAMETERS  --  VOICE.TYPE
  1271. '                         VOICE.TYPE$
  1272. '
  1273. '  SUBROUTINE PURPOSE --  TO SELECT THE RBBS-PC SUPPORTED VOICE
  1274. '                         SYNTHESIZERS
  1275. '
  1276.       SUB VOICETYPE STATIC
  1277.       ON SUBROUTINE.PARAMETER GOTO 60482,60484
  1278. 60482 CLS
  1279.       LOCATE 3,1
  1280.       PRINT "     RBBS-PC is supported in the following:"
  1281.       PRINT "            Voice Synthesizers"
  1282.       PRINT "          0. None"
  1283.       PRINT "          1. CompuTalker"
  1284.       PRINT "             B.G. MICRO"
  1285.       PRINT "             P.O. Box 280298"
  1286.       PRINT "             Dallas, Texas 75228"
  1287.       PRINT "          2. HearSay 1000"
  1288.       PRINT "             HEARSAY INC."
  1289.       PRINT "             1825 74th Street"
  1290.       PRINT "             Brooklyn, New York 11204"
  1291. 60483 CALL ASKRO("Select environment (0 to 2, [ENTER] quits)",24,X$)
  1292.       IF X$ = "" THEN _
  1293.          EXIT SUB
  1294.       VOICE.TYPE = VAL(X$)
  1295.       IF VOICE.TYPE < 0 OR VOICE.TYPE > 2 THEN _
  1296.          GOTO 60483
  1297. 60484 IF VOICE.TYPE = 0 THEN _
  1298.          VOICE.TYPE$ = NONE.PICKED$
  1299.       IF VOICE.TYPE = 1 THEN _
  1300.          VOICE.TYPE$ = "CompuTalker"
  1301.       IF VOICE.TYPE = 2 THEN _
  1302.          VOICE.TYPE$ = "HearSay 1000"
  1303.       END SUB
  1304. '  $SUBTITLE: 'ASKRO - ask a question at a specific row'
  1305. '  $PAGE
  1306. '
  1307. '  SUBROUTINE NAME    --  ASKRO
  1308. '
  1309. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1310. '                         ANS$           STRING TO PUT THE ANSWER IN
  1311. '                         STRNG$         STRING CONTAINING THE QUESTION
  1312. '                         RO             ROW TO ASK THE QUESTION ON
  1313. '
  1314. '  OUTPUT PARAMETERS  --  ANS$           RESPONSE FROM THE KEYBOARD
  1315. '
  1316. '  SUBROUTINE PURPOSE --  TO ASK A QUESTION ON THE PC'S DISPLAY AT A
  1317. '                         SPECIFIC ROW
  1318. '
  1319.       SUB ASKRO (STRNG$,RO,ANS$) STATIC
  1320. 61100 LOCATE RO,1
  1321.       PRINT SPACE$(79);
  1322.       LOCATE RO,5
  1323.       PRINT STRNG$;" ";
  1324.       LINE INPUT;ANS$
  1325.       END SUB
  1326. '  $SUBTITLE: 'GETINIT - get an integer'
  1327. '  $PAGE
  1328. '
  1329. '  SUBROUTINE NAME    --  GETINIT
  1330. '
  1331. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1332. '                         ANS            WHERE TO PUT THE ANSWER IN
  1333. '                         STRNG$         STRING CONTAINING THE QUESTION
  1334. '                         RO             ROW TO ASK THE QUESTION ON
  1335. '                         MIN            MINIMUM ACCEPTABLE NUMBER
  1336. '                         MAX            MAXIMUM ACCEPTABLE NUMBER
  1337. '
  1338. '  OUTPUT PARAMETERS  --  ANS            RESPONSE FROM THE KEYBOARD
  1339. '
  1340. '  SUBROUTINE PURPOSE --  TO ASK A QUESTION ON THE PC'S DISPLAY AT A
  1341. '                         SPECIFIC ROW AND GET AN INTEGER BACK
  1342. '
  1343.       SUB GETINIT (STRNG$,RO,MIN,MAX,ANS,CR) STATIC
  1344. 61110 LOCATE RO,1
  1345.       CR = FALSE
  1346.       ANS = MIN
  1347.       PRINT SPACE$(79);
  1348.       LOCATE RO,5
  1349.       PRINT STRNG$;" ";
  1350.       LINE INPUT;ANS$
  1351.       IF ANS$ = "" THEN _
  1352.          CR = TRUE : _
  1353.          EXIT SUB
  1354.       IF VAL(ANS$) < MIN OR _
  1355.          VAL(ANS$) > MAX THEN _
  1356.          GOTO 61110
  1357.       ANS = VAL(ANS$)
  1358.       IF ANS = 0 AND LEFT$(ANS$,1) <> "0" THEN _
  1359.          GOTO 61110
  1360.       END SUB
  1361. '  $SUBTITLE: 'GETNUMYN - get a TRUE-FALSE answer to a YES OR NO question'
  1362. '  $PAGE
  1363. '
  1364. '  SUBROUTINE NAME    --  GETNUMYN
  1365. '
  1366. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1367. '                         STRNG$         STRING CONTAINING THE QUESTION
  1368. '
  1369. '  OUTPUT PARAMETERS  --  ANS            Returned value - -1 IF yes, 0 IF no
  1370. '
  1371. '  SUBROUTINE PURPOSE --  TO ASK A QUESTION ON THE PC'S DISPLAY AND GET A
  1372. '                         YES OR NO ANSWER CONVERTED TO TRUE/FALSE
  1373. '
  1374.        SUB GETNUMYN (STRNG$,ANS) STATIC
  1375.        CALL GETYESNO (STRNG$,ANS$)
  1376.        ANS = FNYESNO (ANS$)
  1377.        END SUB
  1378. '  $SUBTITLE: 'GETYESNO - Ask a YES OR NO question'
  1379. '  $PAGE
  1380. '
  1381. '  SUBROUTINE NAME    --  GETYESNO
  1382. '
  1383. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1384. '                         ANS$           STRING TO PUT THE ANSWER IN
  1385. '                         STRNG$         STRING CONTAINING THE QUESTION
  1386. '
  1387. '  OUTPUT PARAMETERS  --  ANS$           RESPONSE FROM THE KEYBOARD
  1388. '
  1389. '  SUBROUTINE PURPOSE --  TO ASK A QUESTION ON THE PC'S DISPLAY AND GET A
  1390. '                         YES OR NO ANSWER
  1391. '
  1392.       SUB GETYESNO (STRNG$,ANS$) STATIC
  1393. 61200 CALL ASKRO (STRNG$+" Y)es or N)o",24,HJ$)
  1394.       L = LEN(HJ$)
  1395.       IF L < 1 OR L > 3 THEN _
  1396.          GOTO 61207
  1397.       CALL ALLCAPS(HJ$)
  1398.       X = INSTR("NY",LEFT$(HJ$,1))
  1399.       ON X GOTO 61210,61212
  1400. 61207 BEEP
  1401.       GOTO 61200
  1402. 61210 ANS$ = "NO"
  1403.       EXIT SUB
  1404. 61212 ANS$ = "YES"
  1405.       EXIT SUB
  1406.       END SUB
  1407. '  $SUBTITLE: 'ALLCAPS - convert a sting into all capital letters'
  1408. '  $PAGE
  1409. '
  1410. '  SUBROUTINE NAME    --  ALLCAPS
  1411. '
  1412. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1413. '                         STRNG$         STRING CONTAINING THE QUESTION
  1414. '
  1415. '  OUTPUT PARAMETERS  --  STRNG$         CAPITALIZED STRING
  1416. '
  1417. '  SUBROUTINE PURPOSE --  TO CAPITALIZE A STRING
  1418. '
  1419.       SUB ALLCAPS (STRNG$) STATIC
  1420.       FOR WasZ = 1 TO LEN(STRNG$)                                    ' KG072601
  1421.          WasX = ASC(MID$(STRNG$,WasZ,1))                             ' KG072601
  1422.          IF WasX > 96 THEN IF WasX < 123 THEN _                      ' KG072601
  1423.             MID$(STRNG$,WasZ,1) = CHR$(WasX AND 223)                 ' KG072601
  1424.       NEXT
  1425.       END SUB
  1426. '  $SUBTITLE: 'ASKUPOS - find the unique user field for USERS'
  1427. '  $PAGE
  1428. '
  1429. '  SUBROUTINE NAME    --  ASKUPOS
  1430. '
  1431. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1432. '                         HDR$           HEADER
  1433. '                         BEGIN.COL      BEGINNING COLUMN OF FIELD
  1434. '                         FIELD.LEN      LENGTH OF FIELD IN USER'S RECORD
  1435. '                         PRMPT$         PROMPT TO GIVE FOR FIELD
  1436. '
  1437. '  OUTPUT PARAMETERS  --  ABOVE INPUTS UPDATED WITH USER'S RESPONSES
  1438. '
  1439. '  SUBROUTINE PURPOSE --  TO ASK THE SYSOP WHAT UNIQUE FIELD IN THE USERS
  1440. '                         RECORD IS TO BE ASKED FOR AT LOGON
  1441. '
  1442.       SUB ASKUPOS (HDR$,BEGIN.COL,FIELD.LEN,PRMPT$) STATIC
  1443.       CLS
  1444.       LOCATE 3,20
  1445.       PRINT HDR$;
  1446. 61300 LOCATE 6,5
  1447.       PRINT "1.  BEGINNING COLUMN in USERS file";TAB(44);STR$(BEGIN.COL);"   ";
  1448.       LOCATE 8,5
  1449.       PRINT "2.  Number of CHARACTERS to use";TAB(44);STR$(FIELD.LEN);"   ";
  1450.       LOCATE 10,5
  1451.       PRINT "3.  PROMPT to display to callers";TAB(45);PRMPT$;SPACE$(34-LEN(PRMPT$));
  1452. 61310 CALL ASKRO ("Select option to change (1-3, ENTER to end)",24,X$)
  1453.       IF X$ = "" THEN _
  1454.          EXIT SUB
  1455.       X = VAL(X$)
  1456.       IF X < 1 OR X > 3 THEN _
  1457.          GOTO 61310
  1458.       ON X GOTO 61320,61330,61340
  1459. 61320 CALL ASKRO ("New BEGINNING COLUMN",24,HJ$)
  1460.       IF HJ$ = "" THEN _
  1461.          GOTO 61320
  1462.       X = VAL(HJ$)
  1463.       IF X < 0 OR X > 128 THEN _
  1464.          GOTO 61320
  1465.       BEGIN.COL = X
  1466.       GOTO 61300
  1467. 61330 CALL ASKRO ("New # CHARACTERS to use",24,HJ$)
  1468.       IF HJ$ = "" THEN _
  1469.          GOTO 61330
  1470.       X = VAL(HJ$)
  1471.       IF X < 0 OR X > 31 THEN _
  1472.          GOTO 61330
  1473.       FIELD.LEN = X
  1474.       GOTO 61300
  1475. 61340 CALL ASKRO ("New PROMPT",24,HJ$)
  1476.       IF LEN(HJ$) > 34 THEN _
  1477.          GOTO 61340
  1478.       PRMPT$ = HJ$
  1479.       GOTO 61300
  1480.       END SUB
  1481. '  $SUBTITLE: 'ANYNUMBER - input any numeric value'
  1482. '  $PAGE
  1483. '
  1484. '  SUBROUTINE NAME    --  ANYNUMBER
  1485. '
  1486. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1487. '                         PRMPT$           PROMPT
  1488. '
  1489. '  OUTPUT PARAMETERS  --  RETURNED.VALUE!  VALUE RETURNED
  1490. '
  1491. '  SUBROUTINE PURPOSE --  TO GET A NUMERIC VALUE
  1492. '
  1493.       SUB ANYNUMBER (PRMPT$,RETURNED.VALUE!) STATIC
  1494. 61400 CALL ASKRO (PRMPT$,24,HJ$)
  1495.       RETURNED.VALUE! = VAL(HJ$)
  1496.       END SUB
  1497. '  $SUBTITLE: 'ANYINTEGER - input any integer value'
  1498. '  $PAGE
  1499. '
  1500. '  SUBROUTINE NAME    --  ANYINTEGER
  1501. '
  1502. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1503. '                         PRMPT$           PROMPT TO DISPLAY
  1504. '
  1505. '  OUTPUT PARAMETERS  --  RETURNED.VALUE   VALUE RETURNED
  1506. '
  1507. '  SUBROUTINE PURPOSE --  TO GET AN INTEGER VALUE
  1508. '
  1509.       SUB ANYINTEGER (PRMPT$,RETURNED.VALUE) STATIC
  1510. 61450 CALL ANYNUMBER (PRMPT$,RETURNED.VALUE!)
  1511.       IF RETURNED.VALUE! >  32767.0 OR _
  1512.          RETURNED.VALUE! < -32767.0 THEN_
  1513.          BEEP : _
  1514.          GOTO 61450
  1515.       RETURNED.VALUE = RETURNED.VALUE!
  1516.       END SUB
  1517. '  $SUBTITLE: 'MMINTEGER - input any integer value with range check'
  1518. '  $PAGE
  1519. '
  1520. '  SUBROUTINE NAME    --  MMINTEGER
  1521. '
  1522. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1523. '                         PRMPT$           PROMPT
  1524. '                         MIN              MINIMUM VALUE (INCLUSIVE)
  1525. '                         MAX              MAXIMUM VALUE (INCLUSIVE)
  1526. '
  1527. '  OUTPUT PARAMETERS  --  RETURNED.VALUE   VALUE RETURNED
  1528. '
  1529. '  SUBROUTINE PURPOSE --  TO GET AN INTEGER VALUE WITHIN A RANGE
  1530. '
  1531.       SUB MMINTEGER (PRMPT$,MIN,MAX,RETURNED.VALUE) STATIC
  1532. 61500 CALL ANYINTEGER (PRMPT$,RETURNED.VALUE)
  1533.       IF RETURNED.VALUE < MIN OR RETURNED.VALUE > MAX THEN _
  1534.          BEEP : _
  1535.          GOTO 61500
  1536.       END SUB
  1537. '  $SUBTITLE: 'MMREAL - input any single precision real # with range check'
  1538. '  $PAGE
  1539. '
  1540. '  SUBROUTINE NAME    --  MMREAL
  1541. '
  1542. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1543. '                         PRMPT$           PROMPT
  1544. '                         MIN!             MINIMUM VALUE (INCLUSIVE)
  1545. '                         MAX!             MAXIMUM VALUE (INCLUSIVE)
  1546. '
  1547. '  OUTPUT PARAMETERS  --  RETURNED.VALUE!  VALUE RETURNED
  1548. '
  1549. '  SUBROUTINE PURPOSE --  TO GET AN REAL # VALUE WITHIN A RANGE
  1550. '
  1551.       SUB MMREAL (PRMPT$,MIN!,MAX!,RETURNED.VALUE!) STATIC
  1552. 61550 CALL ANYNUMBER (PRMPT$,RETURNED.VALUE!)
  1553.       IF RETURNED.VALUE! < MIN! OR RETURNED.VALUE! > MAX! THEN _
  1554.          BEEP : _
  1555.          GOTO 61550
  1556.       END SUB
  1557. '  $SUBTITLE: 'FINDFILE - Determine whether a file exists'
  1558. '  $PAGE
  1559. '
  1560. '  SUBROUTINE NAME    --  FINDFILE
  1561. '
  1562. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1563. '                         FILNAME$         FILE TO LOOK FOR
  1564. '                         FEXISTS          WHETHER FILE EXISTS
  1565. '
  1566. '  OUTPUT PARAMETERS  --  RETURNED.VALUE   VALUE RETURNED
  1567. '
  1568. '  SUBROUTINE PURPOSE --  DETERMINE WHETHER PASSED FILE NAME EXISTS
  1569. '                         RETURN TRUE OR FALSE IN "FEXISTS"
  1570. '
  1571.       SUB FINDFILE (FILNAME$,FEXISTS) STATIC
  1572. 61600 CALL RBBSFIND (FILNAME$,Z,Y,M,D)
  1573.       FEXISTS = (Z = 0)
  1574.       END SUB
  1575. '  $SUBTITLE: 'CHKFMSDIR - Validate structure of FMS directory'
  1576. '  $PAGE
  1577. '
  1578. '  SUBROUTINE NAME    --  CHKFMSDIR
  1579. '
  1580. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1581. '                         FMSDIR$         NAME OF FMS DIRECTORY
  1582. '                         LINELEN         PROPER LENGTH OF LINES
  1583. '                                         (EXCLUDING CR/LF AT END)
  1584. '                         FMS.DIRCAT$     CATEGORY FILE FOR FMS
  1585. '
  1586. '  OUTPUT PARAMETERS  --  RETURNED.VALUE   VALUE RETURNED
  1587. '
  1588. '  SUBROUTINE PURPOSE --  VERIFIES THAT FMS IS IN VALID FORMAT
  1589. '                         AND DIAGNOSES PROBLEMS
  1590. '
  1591. 61700 SUB CHKFMSDIR (FMSDIR$,LINELEN,FMS.DIRCAT$) STATIC
  1592.       DIM CAT.CODE$(99)
  1593.       CLS
  1594.       LOCATE 5,20
  1595.       PRINT "Checking FMS file ";FMSDIR$;
  1596.       NLINES = 0
  1597.       LOCATE 7,27
  1598.       PRINT "Line #";
  1599.       LOCATE 9,20
  1600.       COLOR 0,7
  1601.       PRINT " Last Line with an ERROR ";
  1602.       LOCATE 12,28
  1603.       PRINT " Last ERROR ";
  1604.       COLOR 7,0
  1605.       NCATS = 0
  1606.       CALL FINDFILE (FMS.DIRCAT$,FEXISTS)
  1607.       IF FEXISTS THEN _
  1608.          NCATS = 1:_
  1609.          CAT.CODE$(1) = "***":_
  1610.          OPEN FMS.DIRCAT$ FOR INPUT AS #2 : _
  1611.          WHILE NOT EOF(2) AND NCATS < UBOUND(CAT.CODE$) :_
  1612.             NCATS = NCATS + 1:_
  1613.             INPUT #2,X$,Y$,X$:_
  1614.             CAT.CODE$(NCATS) = Y$:_
  1615.          WEND:_
  1616.          CLOSE 2
  1617.       GO.ON = -1
  1618.       CALL FINDFILE (FMSDIR$,FEXISTS)
  1619.       IF NOT FEXISTS THEN _
  1620.          LOCATE 6,25 : _
  1621.          PRINT "File not found"; : _
  1622.          GOTO 61750
  1623.       OPEN FMSDIR$ FOR INPUT AS #2
  1624.       WHILE NOT EOF(2) AND GO.ON
  1625.          NLINES = NLINES + 1
  1626.          LINE INPUT #2, A$
  1627.          L = LEN(A$)
  1628.          LOCATE 7,36
  1629.          PRINT NLINES;
  1630.          IF L > LINELEN THEN _
  1631.             CALL HANDERR (A$,NLINES,"Too LONG: has" + STR$(L) + " chars but should have" + STR$(LINELEN),GO.ON):_
  1632.             IF NOT GO.ON THEN _
  1633.                GOTO 61740
  1634.          IF L < LINELEN THEN _
  1635.             X$ = "Too SHORT: has" + STR$(L) + " chars but should have" + STR$(LINELEN) : _
  1636.             CALL HANDERR (A$,NLINES,X$,GO.ON):_
  1637.             IF NOT GO.ON THEN _
  1638.                GOTO 61740
  1639.          IF L > 0 THEN _
  1640.             IF INSTR ("\* ",LEFT$(A$,1)) THEN _
  1641.                GOTO 61740
  1642.          IF L > 30 THEN _
  1643.             X$ = MID$(A$,24,2) + _
  1644.                  MID$(A$,27,2) + _
  1645.                  MID$(A$,30,2) : _
  1646.             I = 1 : _
  1647.             WHILE I < 7 AND INSTR("0123456789",MID$(X$,I,1)) > 0 : _
  1648.                I = I + 1: _
  1649.             WEND: _
  1650.             IF I < 7 THEN _
  1651.                CALL HANDERR (A$,NLINES,"INVALID CHARACTER <" + MID$(X$,I,1) + "> in date field",GO.ON) : _
  1652.                IF NOT GO.ON THEN _
  1653.                   GOTO 61740
  1654.          I = 1
  1655.          Y$ = MID$(A$,L - 2)
  1656.          CALL REMOVE (Y$," ")
  1657.          WHILE I <= NCATS AND Y$ <> CAT.CODE$(I)
  1658.             I = I + 1
  1659.          WEND
  1660.          IF I > NCATS THEN _
  1661.             CALL HANDERR (A$,NLINES,"Category code <" + Y$ + "> NOT IN " + FMS.DIRCAT$,GO.ON)
  1662. 61740 WEND
  1663. 61750 CLOSE 2
  1664.       IF GO.ON THEN _
  1665.          LOCATE 15,15:_
  1666.          BEEP:_
  1667.          CALL ASKRO ("           Done checking.  Press [ENTER] to continue",20,ANS$)
  1668.       END SUB
  1669. '  $SUBTITLE: 'CHKPERSDIR - Validate personal directories'
  1670. '  $PAGE
  1671. '
  1672. '  SUBROUTINE NAME    --  CHKPERSDIR
  1673. '
  1674. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1675. '                         PDIR$           NAME OF PERSONAL DIRECTORY
  1676. '                         NAMELEN         PROPER LENGTH OF NAME FIELD
  1677. '
  1678. '  OUTPUT PARAMETERS  --  NONE
  1679. '
  1680. '  SUBROUTINE PURPOSE --  CHECKS PERSONAL DIRECTORY FOR PROPER FORMAT
  1681. '
  1682. 61755 SUB CHKPERSDIR (PDIR$, DESC.LEN, NAMELEN) STATIC
  1683.       CLS
  1684.       LOCATE 5, 21
  1685.       PRINT "Checking Personal Directory "; PDIR$;
  1686.       NLINES = 0
  1687.       LOCATE 7, 27
  1688.       PRINT "Line #";
  1689.       LOCATE 9, 20
  1690.       COLOR 0, 7
  1691.       PRINT " Last Line with an ERROR ";
  1692.       LOCATE 12, 28
  1693.       PRINT " Last ERROR ";
  1694.       COLOR 7, 0
  1695.       GO.ON = -1
  1696.       CALL FINDFILE(PDIR$, FEXISTS)
  1697.       IF NOT FEXISTS THEN _
  1698.          LOCATE 6, 25: _
  1699.          PRINT "File not found"; : _
  1700.          GOTO 61775
  1701.       LINELEN = 34 + DESC.LEN + NAMELEN
  1702.       OPEN PDIR$ FOR INPUT AS #2
  1703.       WHILE NOT EOF(2) AND GO.ON
  1704.          NLINES = NLINES + 1
  1705.          LINE INPUT #2, A$
  1706.          L = LEN(A$)
  1707.          LOCATE 7, 36
  1708.          PRINT NLINES;
  1709.          IF L > LINELEN THEN _
  1710.             CALL HANDERR(A$, NLINES, "Too LONG: has" + STR$(L) + " chars but should have" + STR$(LINELEN), GO.ON) : _
  1711.             IF NOT GO.ON THEN _
  1712.                GOTO 61770
  1713.          IF L < LINELEN THEN _
  1714.             CALL HANDERR(A$, NLINES, "Too SHORT: has" + STR$(L) + " chars but should have" + STR$(LINELEN), GO.ON) : _
  1715.                IF NOT GO.ON THEN _
  1716.                   GOTO 61770
  1717.          IF L > 30 THEN _
  1718.             X$ = MID$(A$, 24, 2) + MID$(A$, 27, 2) + MID$(A$, 30, 2) : _
  1719.             I = 1 : _
  1720.             WHILE I < 7 AND INSTR("0123456789", MID$(X$, I, 1)) > 0 : _
  1721.                I = I + 1 : _
  1722.             WEND : _
  1723.             IF I < 7 THEN _
  1724.                CALL HANDERR(A$, NLINES, "INVALID CHARACTER <" + MID$(X$, I, 1) + "> in date field", GO.ON) : _
  1725.                IF NOT GO.ON THEN _
  1726.                   GOTO 61770
  1727.            IF L = LINELEN THEN _
  1728.               X$ = RIGHT$(A$, 1) : _
  1729.               IF INSTR("*!", X$) = 0 THEN _
  1730.                  CALL HANDERR(A$, NLINES, "Last char on line should be * or ! but found <" + X$ + ">", GO.ON) : _
  1731.                  IF NOT GO.ON THEN  _
  1732.                     GOTO 61770
  1733.            IF L = LINELEN THEN _
  1734.               X$ = MID$(A$, L - NAMELEN, LINELEN) : _
  1735.               IF LEFT$(X$, 1) = " " THEN _
  1736.                  IF INSTR("0123456789-", MID$(X$, 2, 1)) = 0 THEN _
  1737.                     CALL HANDERR(A$, NLINES, "Name field at col" + STR$(L - NAMELEN) + " has <" + LEFT$(X$, 1) + ">, needs non-blank or blank+number", GO.ON) : _
  1738.                     IF NOT GO.ON THEN _
  1739.                        GOTO 61770
  1740. 61770 WEND
  1741. 61775 CLOSE 2
  1742.       IF GO.ON THEN _
  1743.          LOCATE 15, 15 : _
  1744.          BEEP : _
  1745.          CALL ASKRO("           Done checking.  Press [ENTER] to continue", 20, ANS$)
  1746.       END SUB
  1747. '  $SUBTITLE: 'HANDERR - subroutine to handle FMS errors'
  1748. '  $PAGE
  1749. '
  1750. '  SUBROUTINE NAME    -- HANDERR
  1751. '
  1752. '  INPUT PARAMETERS   -- PARAMETER                      MEANING
  1753. '                        ERRLINE$                LINE THAT HAS THE ERROR
  1754. '                        ERRL                    LINE NUMBER WITH ERROR
  1755. '                        ERRMES$                 ERROR MESSAGE TO ISSUE
  1756. '
  1757. '  OUTPUT PARAMETERS  -- GO.ON                   INIDCATE TO PROCEDURE OR NOT
  1758. '
  1759. '  SUBROUTINE PURPOSE -- TO HANDLE ERROR CHECKING OF THE FMS DIRECTORY
  1760. '
  1761.       SUB HANDERR (ERRLINE$,ERRL,ERRMES$,GO.ON) STATIC
  1762.       LOCATE 10,1
  1763.       PRINT SPACE$(80);
  1764.       LOCATE 10,1
  1765.       PRINT ERRLINE$;
  1766.       LOCATE 9,45
  1767.       PRINT STR$(ERRL);
  1768.       LOCATE 13,1
  1769.       PRINT SPACE$(79);
  1770.       L = LEN(ERRMES$)
  1771.       IF L > 68 THEN _
  1772.          STRT = 1 _
  1773.       ELSE STRT = (70 - L) / 2
  1774.       LOCATE 13,STRT
  1775.       PRINT ERRMES$;
  1776.       CALL ASKRO ("               CONTINUE checking (Y/N,[ENTER]=Y) ",20,ANS$)
  1777.       IF ANS$ = "" THEN _
  1778.          ANS$ = "Y"
  1779.       CALL ALLCAPS (ANS$)
  1780.       GO.ON = FNYESNO (ANS$)
  1781.       END SUB
  1782. ' $SUBTITLE: 'REMOVE - subroutine to delete a string from within a string'
  1783. ' $PAGE
  1784. '
  1785. '  SUBROUTINE NAME    -- REMOVE
  1786. '
  1787. '  INPUT PARAMETERS   -- PARAMETER                      MEANING
  1788. '                        BADSTRING$              STRING CONTAINING CHARACTERS
  1789. '                                                TO BE DELETED FROM "L$"
  1790. '                        L$                      STRING TO BE ALTERED
  1791. '
  1792. '  OUTPUT PARAMETERS  -- L$                      WITH THE CHARACTERS IN
  1793. '                                                "BADSTRING#" DELETED FROM IT
  1794. '
  1795. '  SUBROUTINE PURPOSE -- TO REMOVE ALL INSTANCES OF THE CHARACTERS IN
  1796. '                        "BADSTRING$" FROM "L$"
  1797. '
  1798.       SUB REMOVE (L$,BADSTRNG$) STATIC
  1799. 61800 J = 0
  1800.       FOR I = 1 TO LEN(L$)
  1801.          IF INSTR(BADSTRNG$,MID$(L$,I,1)) = 0 THEN_
  1802.             J = J + 1:_
  1803.             MID$(L$,J,1) = MID$(L$,I,1)
  1804.       NEXT I
  1805.       L$ = LEFT$(L$,J)
  1806.       END SUB
  1807. ' $SUBTITLE: 'GETASCII - subroutine to prompt for any ASCII values'
  1808. ' $PAGE
  1809. '
  1810. '  SUBROUTINE NAME    -- GETASCII
  1811. '
  1812. '  INPUT PARAMETERS   -- PARAMETER                      MEANING
  1813. '                        TITLE$                  HEADER EXPANATION FOR PARAM
  1814. '
  1815. '  OUTPUT PARAMETERS  -- STRNG$                  RESULTANT CONFIG PARAMETER
  1816. '
  1817. '  SUBROUTINE PURPOSE -- ALLOWS ANY ASCII CHARACTER TO BE STORED IN A PARAMETER
  1818. '                        BY ENCLOSING IT IN SQUARE BRACKETS.  CHARACTERS NOT IN
  1819. '                        SQUARE BRACKETS ARE INTERPRETED EXACTLY AS ENTERED.
  1820. '                        CHARACTER'S ASCII VALUE EQUAL THE NUMERIC VALUE IN THE
  1821. '                        SQUARE BRACKETS.
  1822. '
  1823.       SUB GETASCII (TITLE$,STRNG$) STATIC
  1824. 61810 CLS
  1825.       LOCATE 8,30
  1826.       PRINT TITLE$;
  1827.       LOCATE 13,5
  1828.       PRINT "Current value is"
  1829.       PRINT STRNG$
  1830.       PRINT
  1831.       PRINT "Please enter the new values by entering the character"
  1832.       PRINT "or enclosing its ASCII value in square brackets:"
  1833.       PRINT "(Press ENTER to make empty)
  1834.       LINE INPUT "";HJ$
  1835.       STRNG$ = HJ$
  1836.       END SUB
  1837. ' $SUBTITLE: 'BRKFNAME - subroutine to decompose a file name'
  1838. ' $PAGE
  1839. '
  1840. '  SUBROUTINE NAME    -- BRKFNAME
  1841. '
  1842. '  INPUT PARAMETERS   -- PARAMETER                     MEANING
  1843. '                        FILENAME$       NAME OF THE FILE TO BE DECOMPOSED
  1844. '                        FOR.JOINING     INDICATOR IF OUTPUT IS TO BE COMPBINED
  1845. '
  1846. '  OUTPUT PARAMETERS  -- DRVPATH$        DRIVE AND PATH
  1847. '                        PREFIX$         8-CHARACTER FILE NAME PREFIX
  1848. '                        EXTENSION$      3-CHARACTER EXTENSION
  1849. '
  1850. '  SUBROUTINE PURPOSE -- BREAKS DOWN A FILE NAME INTO A DRIVE AND PATH,
  1851. '                        FILE PREFIX (8 CHARACTERS), AND FILE EXTENSION
  1852. '                        (3 CHARACTERS).  IF "FOR.JOINING" IS TRUE, THE
  1853. '                        DRIVE AND PATH HAVE A ":" AND A "\" IN IT AND
  1854. '                        THE EXTENSION BEGINS WITH A ".".
  1855. '
  1856.       SUB BRKFNAME (FILENAME$,DRVPATH$,PREFIX$,EXTENSION$,FOR.JOINING) STATIC
  1857.       FLNAME$ = FILENAME$                                            ' DA082103
  1858. 61830 CALL ALLCAPS (FLNAME$)                                         ' DA082103
  1859.       DRVPATH$ = ""
  1860.       PREFIX$ = ""
  1861.       EXTENSION$ = ""                                                ' KG082301
  1862.       L = LEN(FLNAME$)                                               ' DA082103
  1863.       IF L < 1 THEN _                                                ' DA082103
  1864.          EXIT SUB
  1865.       CALL FINDLAST (FLNAME$,"\",X,Y)                                ' DA082103
  1866.       IF X < 1 THEN _
  1867.          IF MID$(FLNAME$,2,1) = ":" THEN _                           ' DA082103
  1868.             DRVPATH$ = LEFT$(FLNAME$, 2): _                          ' DA082101
  1869.             S = 3 _
  1870.          ELSE S = 1 _
  1871.       ELSE DRVPATH$ = LEFT$(FLNAME$,X) : _                           ' DA082101
  1872.            S = X + 1
  1873.       X = INSTR(FLNAME$+".",".")
  1874.       IF X < L THEN _                                                ' DA082103
  1875.          EXTENSION$ = MID$(FILENAME$,X)                              ' DA082101
  1876.       IF S <= L THEN _                                               ' DA082103
  1877.          IF X >= S THEN _                                            ' DA082103
  1878.             PREFIX$ = MID$(FLNAME$,S,X - S)                          ' DA082103
  1879.       IF FOR.JOINING THEN _                                          ' DA082101
  1880.          EXIT SUB
  1881.       IF Y > 1 THEN _                                                ' KG082301
  1882.          DRVPATH$ = LEFT$(DRVPATH$, LEN(DRVPATH$) - 1)               ' DA082101
  1883.       IF LEN(EXTENSION$) > 0 THEN _
  1884.          EXTENSION$ = MID$(EXTENSION$, 2)                            ' DA082101
  1885.       END SUB
  1886. '
  1887. '  $SUBTITLE: 'TRIMTRAIL - subroutine to trim off trailing characters'
  1888. '  $PAGE
  1889. '
  1890. '  SUBROUTINE NAME    --  TRIMTRAIL
  1891. '
  1892. '  INPUT PARAMETERS   --  PARAMETER           MEANING
  1893. '                         TRIM.PARM$  TIME IN SECONDS AFTER MIDNIGHT TO WAIT
  1894. '                                     BEFORE DISPLAYING
  1895. '                         TRIM.THIS$  WHAT CHARACTER TO TRIM OFF END
  1896. '
  1897. '  OUTPUT PARAMETERS  --  NONE
  1898. '
  1899. '  SUBROUTINE PURPOSE --  TO DISPLAY RBBS-PC's SYSOP MENU ON THE LOCAL SCREEN
  1900. '
  1901. 61840 SUB TRIMTRAIL (TRIM.PARM$,TRIM.THIS$) STATIC
  1902.       WHILE RIGHT$(TRIM.PARM$,1) = TRIM.THIS$
  1903.          TRIM.PARM$ = LEFT$(TRIM.PARM$,LEN(TRIM.PARM$) - 1)
  1904.       WEND
  1905.       END SUB
  1906. ' $SUBTITLE: 'FINDLAST - subroutine to find last occurence of a string'
  1907. ' $PAGE
  1908. '
  1909. '  SUBROUTINE NAME    -- FINDLAST
  1910. '
  1911. '  INPUT PARAMETERS   -- PARAMETER             MEANING
  1912. '                        LOOK.IN$           STRING TO LOOK INTO
  1913. '                        LOOK.FOR$          STRING TO SEARCH FOR
  1914. '
  1915. '  OUTPUT PARAMETERS  -- WHERE.FOUND        POSITION IN LOOK.IN$ THAT
  1916. '                                            LOOK.FOR$ FOUND
  1917. '                        NUM.FINDS          HOW MANY OCCURENCES IN LOOK.IN$
  1918. '
  1919. '  SUBROUTINE PURPOSE -- FINDS THE LAST OCCURANCE OF "LOOK.FOR$" IN "LOOK.IN$"
  1920. '                        AND RETURNS COUNT OF NUMBER OF OCCURENCES.  IF NONE
  1921. '                        ARE FOUND, BOTH RETURNED PARAMETERS ARE ZERO.
  1922. '
  1923.       SUB FINDLAST (LOOK.IN$,LOOK.FOR$,WHERE.FOUND,NUM.FINDS) STATIC
  1924. 61850 WHERE.FOUND = INSTR(LOOK.IN$,LOOK.FOR$)
  1925.       NUM.FINDS = -(WHERE.FOUND > 0)
  1926.       NEXT.FOUND = INSTR(WHERE.FOUND + 1,LOOK.IN$,LOOK.FOR$)
  1927.       WHILE NEXT.FOUND > 0
  1928.          NUM.FINDS = NUM.FINDS + 1
  1929.          WHERE.FOUND = NEXT.FOUND
  1930.          NEXT.FOUND = INSTR(WHERE.FOUND + 1,LOOK.IN$,LOOK.FOR$)
  1931.       WEND
  1932.       END SUB
  1933. ' $SUBTITLE: 'SECURE - subroutine to assign security to commands'
  1934. ' $PAGE
  1935. '
  1936. '  SUBROUTINE NAME    -- SECURE
  1937. '
  1938. '  INPUT PARAMETERS   -- PARAMETER             MEANING
  1939. '                        SECTION$           NAME OF THE SECTION
  1940. '                        DEFAULTS$          DEFAULT COMMANDS FOR THE SECTION
  1941. '                        NUMBER.OF.COMMANDS NUMBER OF COMMANDS IN THE SECTION
  1942. '                        COMMANDS$()        CHARACTERS REPRESENTING THE ONE-
  1943. '                                              CHARACTER COMMANDS
  1944. '                        COMMANDS()         SECURITY LEVEL ASSOCIATED WITH
  1945. '                                           THE COMMAND
  1946. '                        SECTION.COMMANDS$  PROMPT STRING OF ALL COMMANDS IN
  1947. '                                             THE SECTION
  1948. '
  1949. '  OUTPUT PARAMETERS  -- COMMANDS$()        CHARACTERS REPRESENTING THE ONE-
  1950. '                                              CHARACTER COMMANDS
  1951. '                        COMMANDS()         SECURITY LEVEL ASSOCIATED WITH
  1952. '                                           THE COMMAND
  1953. '                        SECTION.COMMANDS$  PROMPT STRING OF ALL COMMANDS IN
  1954. '                                             THE SECTION
  1955. '
  1956. '  SUBROUTINE PURPOSE -- ALLOWS USERS TO MODIFY COMMANDS AND SECURITY FOR
  1957. '                        EACH COMMAND.
  1958. '
  1959.       SUB SECURE (SECTION$,DEFAULTS$,NUMBER.OF.COMMANDS,COMMANDS$(2),COMMANDS(1),SECTION.COMMANDS$) STATIC
  1960. 61860 IF IPAGE = 2 OR _
  1961.          VAL(OPTION$) = 310 THEN _
  1962.          XX$ = "ALL " + _
  1963.                SECTION$ + _
  1964.                " commands use default letters?" _
  1965.       ELSE XX$ = "ALL " + _
  1966.                SECTION$ + _
  1967.                " commands = SAME security level?"
  1968.       LOCATE 24,1
  1969.       PRINT SPACE$(79);
  1970.       LOCATE 24,1
  1971.       CALL GETNUMYN (XX$,AB)
  1972.       IF NOT AB THEN _
  1973.          GOTO 61880
  1974. 61870 IF IPAGE = 2 OR _
  1975.          VAL(OPTION$) = 310 THEN _
  1976.          SECTION.COMMANDS$ = DEFAULTS$ : _
  1977.          FOR I = 1 TO NUMBER.OF.COMMANDS : _
  1978.             COMMANDS$(I,2) = MID$(SECTION.COMMANDS$,I,1) : _
  1979.          NEXT : _
  1980.          EXIT SUB
  1981.       CALL MMINTEGER("Security level for all " + _
  1982.                       SECTION$ + _
  1983.                      " commands is?",-32767,32767,B1)
  1984.       FOR I = 1 TO NUMBER.OF.COMMANDS
  1985.          COMMANDS(I) = B1
  1986.       NEXT
  1987.       GB = B1
  1988.       EXIT SUB
  1989. 61880 GOSUB 61900
  1990.       IROW = 4
  1991.       ICOL = 10
  1992.       FOR I = 1 TO NUMBER.OF.COMMANDS
  1993.          LOCATE IROW + I,ICOL
  1994.          IF IPAGE = 2 OR _
  1995.             VAL(OPTION$) = 310 THEN _
  1996.             PRINT COMMANDS$(I,1);" ";COMMANDS$(I,2) _
  1997.          ELSE PRINT COMMANDS$(I,1);STR$(COMMANDS(I))
  1998.       NEXT
  1999. 61890 CALL ASKRO("Enter first character of command ([ENTER] quits)",24,X$)
  2000.       IF X$ = "" THEN _
  2001.          EXIT SUB
  2002.       IF LEN(X$) <> 1 THEN _
  2003.          GOTO 61890
  2004.       CALL ALLCAPS(X$)
  2005.       FF = INSTR(DEFAULTS$,X$)
  2006.       IF FF = 0 THEN _
  2007.          GOTO 61890
  2008.       IF IPAGE = 2 OR _
  2009.          VAL(OPTION$) = 310 THEN _
  2010.          GOTO 61892
  2011.       CALL MMINTEGER("Security level for all " + _
  2012.                       SECTION$ + _
  2013.                      " '" + _
  2014.                      X$ + _
  2015.                      "' commands is?",-32767,32767,B1)
  2016.       GOTO 61893
  2017. 61892 CALL ASKRO("New command for " + _
  2018.                   MID$(COMMANDS$(FF,1),1,INSTR(COMMANDS$(FF,1),"  ")) + _
  2019.                  "is?",24,HK$)
  2020.       IF HK$ = CHR$(34) THEN _                                       ' KG041702
  2021.          GOTO 61892                                                  ' KG041702
  2022.       X$ = MID$(HK$,1,1)
  2023.       CALL ALLCAPS (X$)
  2024.       IF LEN(HK$) > 1 THEN _
  2025.          HK$ = X$ + MID$(HK$,2)
  2026.       IF LEN (HK$) = 1 THEN _
  2027.          HK$ = X$
  2028.       COMMANDS$(FF,2) = HK$
  2029.       MID$(SECTION.COMMANDS$,FF,1) = HK$
  2030.       GOTO 61880
  2031. 61893 COMMANDS(FF) = B1
  2032.       GOTO 61880
  2033. '
  2034. ' * COMMON ROUTINE TO DISPLAY SUBSYSTEM COMMANDS AND THEIR SECURITY LEVELS
  2035. '
  2036. 61900 CLS
  2037.       I! = FRE(C$)
  2038.       COLOR 0,7,0
  2039.       LOCATE 1,23
  2040.       PRINT "RBBS-PC "+ CONFIG.VERSION$ + " Default Configuration";
  2041.       COLOR FG,BG,BORDER
  2042.       LOCATE  2,5
  2043.       PRINT "The RBBS-PC " + _
  2044.              SECTION$ + _
  2045.             " Commands are as follows:"
  2046.       LOCATE   3,10
  2047.       XX$ = "Command             Security"
  2048.       IF IPAGE = 2 OR _
  2049.          VAL(OPTION$) = 310 THEN _
  2050.          XX$ = "Description         Command"
  2051.       PRINT XX$
  2052.       RETURN
  2053.       END SUB
  2054. '  $SUBTITLE: 'GETCOLOR - get colors using natural language'
  2055. '  $PAGE
  2056. '
  2057. '  SUBROUTINE NAME    -- GETCOLOR
  2058. '
  2059. '  INPUT PARAMETERS   -- PARAMETER             MEANING
  2060. '                        STRNG$             TITLE OF WHAT COLOR IS FOR
  2061. '                        NUM.COLOR          CURRENT COLOR SETTING
  2062. '
  2063. '  OUTPUT PARAMETERS  -- NUM.COLOR          NEW COLOR SETTING
  2064. '
  2065. '  SUBROUTINE PURPOSE -- SET THE COLOR USING NATURAL LANGUAGE PHRASES
  2066. '
  2067.       SUB GETCOLOR (STRNG$,NUM.COLOR) STATIC
  2068.       CLS
  2069. 61950 IF NUM.COLOR > 7 THEN _
  2070.          X = NUM.COLOR - 8 _
  2071.       ELSE X = NUM.COLOR
  2072.       X$ = MID$("<none>Blue  Green Cyan  Red   PurpleYellowWhite",X*6+1,6)
  2073.       LOCATE 9,15
  2074.       PRINT STRNG$;" now ";X$;"     ";
  2075. 61955 CALL ASKRO ("Make N)one,R)ed,G)reen,Y)ellow,B)lue,P)urple,C)yan,W)hite,[ENTER] quits",20,ANS$)
  2076.       IF ANS$ = "" THEN _
  2077.          EXIT SUB
  2078.       CALL ALLCAPS (ANS$)
  2079.       Y = INSTR("NBGCRPYW",ANS$) - 1
  2080.       IF Y < 0 THEN _
  2081.          GOTO 61955
  2082.       NUM.COLOR = Y
  2083.       GOTO 61950
  2084.       END SUB
  2085. ' $SUBTITLE: 'GETANSI - SUBROUTINE TO GET CALLERS COLOR VALUES'
  2086. ' $PAGE
  2087. '
  2088. '  SUBROUTINE NAME    -- GETANSI
  2089. '
  2090. '  INPUT PARAMETERS   -- PARAMETER                      MEANING
  2091. '                        SELECTION$       NAME OF SELECTION TO HAVE COLOR
  2092. '                        PRMPT$           WHAT TO PROMPT ON THE SCREEN
  2093. '
  2094. '  OUTPUT PARAMETERS  -- FG.1.DEF$        FIRST COLOR SELECTION
  2095. '                        FG.2.DEF$        SECOND COLOR SELECTION
  2096. '                        FG.3.DEF$        THIRD COLOR SELECTION
  2097. '                        FG.4.DEF$        FOURTH COLOR SELECTION
  2098. '
  2099. '  SUBROUTINE PURPOSE -- ASK THE SYSOP TO SELECT THE FOUR COLORS TO BE
  2100. '                        USED FOR CALLERS THAT SELECT COLOR DISPLAYS.
  2101. '
  2102.       SUB GETANSI (SELECTION$,PRMPT$) STATIC
  2103.       CLS
  2104. 62000 LOCATE 8,10
  2105.       PRINT PRMPT$;" Foreground for caller now ";SELECTION$;"       "
  2106.       LOCATE 10,1
  2107.       PRINT "Current foreground selections: ";
  2108.       CALL COLORCODE (FG.1.DEF$,X$,X)
  2109.       COLOR X,CALLER.BKGRD
  2110.       PRINT "First ";
  2111.       CALL COLORCODE (FG.2.DEF$,X$,X)
  2112.       COLOR X
  2113.       PRINT "Second ";
  2114.       CALL COLORCODE (FG.3.DEF$,X$,X)
  2115.       COLOR X
  2116.       PRINT "Third ";
  2117.       CALL COLORCODE (FG.4.DEF$,X$,X)
  2118.       COLOR X
  2119.       PRINT "Fourth"
  2120.       COLOR FG,BG
  2121. 62040 CALL ASKRO ("Make N)one,R)ed,G)reen,Y)ellow,B)lue,P)urple,C)yan,W)hite,[ENTER] quits",14,ANS$)
  2122.       IF ANS$ = "" THEN _
  2123.          EXIT SUB
  2124.       CALL ALLCAPS (ANS$)
  2125.       X = INSTR("NRGYBPCW",ANS$)
  2126.       IF X < 2 THEN _
  2127.          SELECTION$ = NONE.PICKED$ : _
  2128.          GOTO 62000
  2129.       X$ = MID$("Red   Green YellowBlue  PurpleCyan  White",X*6-11,6)
  2130.       CALL ASKRO ("Make "+X$+" [B]right, or N)ormal",17,ANS$)
  2131.       CALL ALLCAPS (ANS$)
  2132.       IF ANS$ <> "N" THEN _
  2133.          SELECTION$ = "Bright " + X$ _
  2134.       ELSE SELECTION$ = "Normal " + X$
  2135.       GOTO 62000
  2136.       END SUB
  2137. ' $SUBTITLE: 'COLORCODE - SUBROUTINE TO GET COLOR CODES'
  2138. ' $PAGE
  2139. '
  2140. '  SUBROUTINE NAME    -- COLORCODE
  2141. '
  2142. '  INPUT PARAMETERS   -- PARAMETER                      MEANING
  2143. '                        NAT.LANG.COLOR$  NATURAL LANGUAGE LETTER OF COLOR
  2144. '                                           N = NONE
  2145. '                                           B = BLUE
  2146. '                                           G = GREEN
  2147. '                                           C = CYAN
  2148. '                                           R = RED
  2149. '                                           P = PURPLE
  2150. '                                           Y = YELLOW
  2151. '                                           W = WHITE
  2152. '
  2153. '  OUTPUT PARAMETERS  -- ANSI.COLOR$      CORRECT CHARACTER SEQUENCE OF COLOR
  2154. '                        BASIC.FG         NUMBER FOR BASIC FORGROUND
  2155. '
  2156. '  SUBROUTINE PURPOSE -- TO CONVERT THE NATURAL LANGUAGE COLOR SELECTION INTO
  2157. '                        COLOR CODES THAT ARE MEANINGFUL.
  2158. '
  2159.       SUB COLORCODE (NAT.LANG.COLOR$,ANSI.COLOR$,BASIC.FG) STATIC
  2160.       BASIC.FG = 7
  2161.       IF NAT.LANG.COLOR$ = NONE.PICKED$ THEN _
  2162.          ANSI.COLOR$ = "" : _
  2163.          EXIT SUB
  2164.       X = INSTR(" BN",LEFT$(NAT.LANG.COLOR$,1))
  2165.       IF X < 2 THEN _
  2166.          EXIT SUB
  2167.       X$ = MID$("10",X-1,1)
  2168.       X = INSTR(NAT.LANG.COLOR$," ")
  2169.       IF X < 1 OR X >= LEN(NAT.LANG.COLOR$) THEN _
  2170.          EXIT SUB
  2171.       Z$ = MID$(NAT.LANG.COLOR$,X+1,1)
  2172.       X = INSTR("RGYBPCW",Z$)
  2173.       IF X < 1 THEN _
  2174.          EXIT SUB
  2175.       BASIC.FG = INSTR("BGCRPYW",Z$) - 8 * (X$="1")
  2176.       Y$ = MID$(STR$(30+X),2)
  2177.       Z = INSTR("NRGYBPCW",MID$("NBGCRPYW",CALLER.BKGRD+1,1))
  2178.       Z$ = MID$(STR$(39+Z),2)
  2179.       ANSI.COLOR$ = CHR$(27) + "[" + X$ + ";" + Z$ + ";" + Y$ + "m"
  2180.       END SUB
  2181. ' $SUBTITLE: 'ANSIDECODE - SUBROUTINE TO DECODE ANSI VALUES'
  2182. ' $PAGE
  2183. '
  2184. '  SUBROUTINE NAME    -- ANSIDECODE
  2185. '
  2186. '  INPUT PARAMETERS   -- PARAMETER                      MEANING
  2187. '                        ANSI.EXPRESSION$ EXPRESSION WITH ANSI COLOR CODES IN
  2188. '
  2189. '  OUTPUT PARAMETERS  -- ANSI.EXPRESSION$ ENGLISH LANGUAGE DESCRIPTION OF COLOR
  2190. '
  2191. '  SUBROUTINE PURPOSE -- DECODES THE ANSI EXPRESSION INTO A MEANINGFUL
  2192. '                        ENGLISH TEXT DESCRIPTION.
  2193. '
  2194.       SUB ANSIDECODE (ANSI.EXPRESSION$) STATIC
  2195.       IF LEN (ANSI.EXPRESSION$) < 3 THEN _
  2196.          EXIT SUB
  2197.       IF ASC(ANSI.EXPRESSION$) <> 27 THEN _
  2198.          EXIT SUB
  2199.       X = INSTR(ANSI.EXPRESSION$,";")
  2200.       IF X < 1 THEN _
  2201.          EXIT SUB
  2202.       IF MID$(ANSI.EXPRESSION$,X-1,1) = "1" THEN _
  2203.          X$ = "Bright " _
  2204.       ELSE X$ = "Normal "
  2205.       X = INSTR(X,ANSI.EXPRESSION$,"m")
  2206.       IF X < 1 THEN _
  2207.          EXIT SUB
  2208.       X = VAL(MID$(ANSI.EXPRESSION$,X-2,2)) - 30
  2209.       IF X < 1 OR X > 7 THEN _
  2210.          EXIT SUB
  2211.       ANSI.EXPRESSION$ = X$ + MID$("Red   Green YellowBlue  PurpleCyan  White",X*6-5,6)
  2212.       END SUB
  2213. 62100 ' set modem strings by selecting a modem
  2214.       SUB SELMODEM STATIC
  2215.       CALL FINDFILE ("MODEMS.SET",OK)
  2216.       IF OK THEN _
  2217.          GOTO 62103                                                  ' DA080503
  2218.       CALL MODEMINITCMD                                              ' KG080901
  2219.       EXIT SUB                                                       ' DA080503
  2220. 62103 CLOSE 2                                                        ' DA080503
  2221.       IF NETWORK.TYPE = 6 THEN _                                     ' DA080503
  2222.          OPEN "MODEMS.SET" FOR INPUT SHARED AS #2 _                  ' DA080503
  2223.       ELSE OPEN "I",2,"MODEMS.SET"                                   ' DA080503
  2224.       MODEM.MODEL = 0
  2225.       MODEM.PAGE = 0                                                 ' DA081001
  2226. 62105 CLS                                                            ' DA080503
  2227.       PRINT "NUMBER";
  2228.       LOCATE 1,10
  2229.       PRINT "Modem Model";
  2230.       LOCATE 1,40
  2231.       PRINT "Switch Settings";
  2232.       LOCATE 2,1
  2233.       PRINT STRING$(78,"-");
  2234.       FOR DISPLAY.LINE = 3 TO 19
  2235.          IF EOF(2) THEN _
  2236.             MODEM.PAGE = 1 : _                                       ' DA081001
  2237.             GOTO 62110
  2238.          MODEM.MODEL = MODEM.MODEL + 1
  2239.          INPUT #2, MODEM.MODEL$, SWITCHES$
  2240.          FOR I = 1 TO 14                    ' # MODEMS.SET parms - 2
  2241.             INPUT #2,GARBAGE$
  2242.          NEXT
  2243.          LOCATE DISPLAY.LINE, 2
  2244.          PRINT MODEM.MODEL;
  2245.          LOCATE DISPLAY.LINE, 10
  2246.          PRINT MODEM.MODEL$;
  2247.          LOCATE DISPLAY.LINE, 40
  2248.          PRINT SWITCHES$;
  2249.       NEXT                                                           ' DA081001
  2250.       LOCATE DISPLAY.LINE + 1, 2
  2251.       PRINT " 0"
  2252.       LOCATE DISPLAY.LINE + 1, 10
  2253.       PRINT "Next Page"
  2254. 62110 LOCATE 24,10                                                   ' DA080503
  2255.       PRINT "Use Parameter 231 to initialize modem's firmware";
  2256.       CALL GETINIT("Select modem number, or [ENTER] to exit", _
  2257.                     22,MODEM.PAGE,MODEM.MODEL,MODEM.SELECTED, CR)    ' DA081001
  2258.       IF CR THEN _
  2259.          EXIT SUB
  2260.       IF MODEM.SELECTED = 0 THEN _                                   ' DA081001
  2261.          GOTO 62105
  2262.       CLOSE 2
  2263.       IF NETWORK.TYPE = 6 THEN _
  2264.          OPEN "MODEMS.SET" FOR INPUT SHARED AS #2 _
  2265.       ELSE OPEN "I",2,"MODEMS.SET"
  2266.       FOR I = 1 TO (MODEM.SELECTED - 1) * 16      ' # of parms * modem
  2267.          INPUT #2,GARBAGE$
  2268.       NEXT
  2269.       INPUT #2, MODEM.MODEL$, _
  2270.                 SWITCHES$, _
  2271.                 USER.ANSWER.COMMAND$, _
  2272.                 USER.COUNT.RINGS.COMMAND$, _
  2273.                 USER.GO.OFFHOOK.COMMAND$, _
  2274.                 USER.INIT.COMMAND$, _
  2275.                 USER.RESET.COMMAND$, _
  2276.                 USER.INITIALIZE.COMMAND$, _
  2277.                 USER.FIRMWARE.CLEAR.CMND$, _
  2278.                 USER.FIRMWARE.WRITE.CMND$, _
  2279.                 RTS$, _
  2280.                 MODEM.INIT.WAIT.TIME, _
  2281.                 MODEM.COMMAND.DELAY.TIME, _
  2282.                 COMMANDS.BETWEEN.RINGS, _
  2283.                 MODEM.INIT.BAUD$, _
  2284.                 KEEP.INIT.BAUD
  2285.       CLOSE 2
  2286.       END SUB
  2287. 62120 SUB MODEMINITCMD STATIC                                        ' KG080901
  2288.       RTS$ = "NO"                                                    ' DA080503
  2289.       MODEM.INIT.WAIT.TIME = 3                                       ' DA080503
  2290.       COMMANDS.BETWEEN.RINGS = FALSE                                 ' DA080503
  2291.       FIRMWARE.INITIALIZE.COMMAND$ = "AT&C1&D3B1E0V1M0S0=0"          ' KG081402
  2292.       FIRMWARE.CLEAR.COMMAND$ = "AT&F"                               ' DA080503
  2293.       FIRMWARE.WRITE.COMMAND$ = "AT&W"                               ' DA080503
  2294.       KEEP.INIT.BAUD = FALSE                                         ' DA080503
  2295.       MODEM.ANSWER.COMMAND$      = "ATQ0X1V1A"
  2296.       MODEM.COMMAND.DELAY.TIME   = 1
  2297.       MODEM.COUNT.RINGS.COMMAND$ = "ATS1?"
  2298.       MODEM.GO.OFFHOOK.COMMAND$  = "ATH1M0"                          ' DA080503
  2299.       'MODEM.GO.OFFHOOK.COMMAND$  = "ATQ1E1H1M0"
  2300.       MODEM.INIT.BAUD$           = "300"
  2301.       MODEM.INIT.COMMAND$        = "ATE0M0Q0V1X1S0=254S2=255S10=20"  ' DA080503
  2302.       'MODEM.INIT.COMMAND$        = "ATM0Q1S2=255S10=30E0Q0X1S0=254  "
  2303.       MODEM.RESET.COMMAND$       = "ATZ"                             ' KG081402
  2304.       'USER.INITIALIZE.COMMAND$   = "AT&C1&D3B1E0V1M0S0=0&T5"
  2305.       'USER.FIRMWARE.WRITE.CMND$  = "&W"
  2306.       USER.ANSWER.COMMAND$ = MODEM.ANSWER.COMMAND$                   ' DA080503
  2307.       USER.COUNT.RINGS.COMMAND$ = MODEM.COUNT.RINGS.COMMAND$         ' DA080503
  2308.       USER.GO.OFFHOOK.COMMAND$ = MODEM.GO.OFFHOOK.COMMAND$           ' DA080503
  2309.       USER.INIT.COMMAND$ = MODEM.INIT.COMMAND$                       ' DA080503
  2310.       USER.RESET.COMMAND$ = MODEM.RESET.COMMAND$                     ' DA080503
  2311.       USER.INITIALIZE.COMMAND$ = FIRMWARE.INITIALIZE.COMMAND$        ' DA080503
  2312.       USER.FIRMWARE.CLEAR.CMND$ = FIRMWARE.CLEAR.COMMAND$            ' DA080503
  2313.       USER.FIRMWARE.WRITE.CMND$ = FIRMWARE.WRITE.COMMAND$            ' DA080503
  2314.       END SUB                                                        ' KG080901
  2315.